ActorStack.dev

17.4% of rows carry a truncated player name, unless you read the attribute

The visible team label in doubles is cut short — `Roger-Vas` rather than the two full surnames. The complete names are in the markup, and that is 17.4% of all rows.

By Oswaldo Carabano4 min read

Short answer

In doubles, TennisExplorer displays a truncated team label such as `Roger-Vas` rather than both players' full surnames, because the column is too narrow for the real string. The complete names are present in the underlying markup attribute, and this Actor reads them from there. Doubles is 17.4% of all rows, so a scraper that takes the visible text produces a dataset where roughly one row in six cannot be joined to a player table by name.

Key points

  • The visible label in doubles is truncated for display, not shortened in the data.
  • The full names are available in the underlying attribute on the same element.
  • Doubles is 17.4% of all rows, so this is not an edge case in the tail of the data.
  • A truncated name breaks joins silently: it looks like a name, so nothing raises an error.
  • Reading the attribute costs nothing extra — it is in the same response as the visible text.
On this page4 sections

A short article about a parsing decision that affects roughly one row in six.

What the page shows

In a doubles row, the team label is rendered short — something like Roger-Vas where the real string is two full surnames. The column is narrow and the site abbreviates to fit.

What is actually in the markup

The complete names are present in an attribute on the same element, which is how the site shows the full string on hover. Reading from there costs nothing extra: it arrives in the same response as the visible text, so this is a parsing choice rather than an additional request.

How much of the data this is

17.4% of all rows. Doubles is not a corner of this dataset — with ATP doubles and WTA doubles both included, it is a sixth of everything.

Why a truncated name is worse than a missing one

Because it looks like a name. A null fails loudly at the first join; Roger-Vas joins to nothing and produces an empty result that looks like a player with no matches. Nothing raises an error, and the row count is right.

It is the same failure shape as the moving day boundary: plausible output, no error, wrong answer.

Frequently asked questions

Why are doubles player names cut short?
Because the display column is narrow, so the page renders an abbreviated team label. The full names are in the markup attribute behind that label, which is where this Actor reads them from.
How many rows does this affect?
17.4% of all rows — the doubles matches. That is roughly one row in six, which is far too many to treat as a tail case.
Does reading the full name cost extra?
No. The attribute arrives in the same response as the visible text, so it is a parsing choice rather than an additional request.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 9 Sept 2026
    TennisExplorer Scraper — Actor README and input schemaActorStack / Apify Store
A single tennis ball resting on the red clay surface of an empty court.
TennisExplorerMeasured

Deriving match status

An unfinished match just shows a scoreline that never closes. Working out which ones those are, without being told whether a match is best-of-3 or best-of-5, across 2,364 matches.

7 min
A white measuring tape curving across a dark background, showing the numbers 15 to 45.
TennisExplorerMeasured

The moving day boundary

TennisExplorer cuts its day using a timezone cookie, so two runs of the same date can legitimately disagree. Pinning every request to UTC is what makes a dataset reproducible.

5 min
Two players mid-rally on an indoor clay tennis court during a competitive match.
TennisExplorerGuide

Scrape tennis results

A walkthrough of extracting tennis data: one entity type per run, the day boundary that has to be pinned, and the two enrichments that cost an extra request each.

8 min