LegitPH
  1. Home
  2. Methodology: how every figure here is produced and checked

Methodology: how every figure here is produced and checked

By Eric, Founder, RedClaw · Published 2026-08-24 · Last updated 2026-08-24

Each PAGCOR PDF is downloaded with a browser user-agent, parsed with the watermark filtered by fill colour and the caution column cropped by x-coordinate, then checked by assertions that inspect the extracted text rather than counting rows. Every published page must additionally clear an automated audit covering seven dimensions before it is allowed to go live, and any blocking failure stops publication outright.

Everything here rests on public PDFs, so the interesting question is not where the data comes from. It is what goes wrong between the PDF and the table, and what we do about it.

How are the source documents retrieved?

By direct download from pagcor.ph with a browser user-agent. PAGCOR’s server returns HTTP 403 to requests that do not send one.

Three files carry the registers this site republishes. The venue register runs to 8 pages and yielded 258 parsed entries at its 31 July 2026 revision. The accredited-affiliates register runs to 4 pages and yielded 54 entries across 2 sections at its 12 August 2026 revision. A third file, the internet gaming licensee list, resists text extraction entirely and is held pending optical character recognition rather than being published half-parsed.

Every retrieved file is stored at the version parsed, unmodified, alongside its parsed output. Nothing is overwritten in place, because the comparison between one month’s register and the next is the part that carries information. A single snapshot only tells you the current position.

What goes wrong when you parse a PAGCOR PDF?

Two things, and both silently corrupt the output rather than failing loudly.

The first is a watermark. PAGCOR overlays the word PAGCOR in light blue Arial across each page of the register PDFs, at a font size above twenty points and a fill colour of roughly RGB 0.0, 0.69, 0.941. Those characters sit in the same text layer as the body copy, so a straightforward extraction interleaves them into words: “Gaming Corp.” comes out as “GamingO Corp.”, and “AS OF JULY 31, 2026” comes out with the letters separated. Filtering by fill colour and font size removes them cleanly. Guessing at the corruption with regular expressions does not, because the inserted characters are legitimate letters in legitimate positions.

The second is layout. The venue register prints a caution notice down the left margin, and a linear text extractor reads across the columns, splicing sentences from the notice into operator names. Cropping to x-coordinates at or above 175 points on a 595-point page isolates the list column. Page headers on later pages still collide with the first row of each page, so those fragments are stripped from the line rather than the whole line being discarded, since discarding the line would take a real operator with it.

Why is a row count not a sufficient test?

Because a parser can return the right number of rows full of the wrong text. Ours did.

This should be recorded because it is a general failure and we walked into it on 24 August 2026. The first version of the parser asserted only that the venue list returned more than a hundred entries. It passed. The output was unusable: operator names carried spliced fragments of the caution notice, page headers had merged into the first entry of each page, and the closing footnote had been appended to the final row. Rewriting the assertions to inspect content instead of quantity surfaced all three problems in sequence, each one hidden behind the last. A count assertion is close to no assertion at all, and any parser test that only counts rows should be assumed to be passing on broken data until proven otherwise.

What checks must a page pass before publication?

An automated audit across seven dimensions, with blocking and advisory levels. Blocking failures prevent publication.

DimensionExamples of what is checked
Content qualityWord count by page type, heading depth, count of dated figures, presence of a primary source link
Machine-writing markersBanned filler vocabulary, hedge density, sentence-length variation
Original contributionEvery page must carry a tagged original element and an explicit judgement
Retrieval friendlinessOpening answer, self-contained fact blocks, canonical tag, llms.txt, AI crawler access
Answer-engine readinessQuestion headings, short direct answers, FAQ and breadcrumb markup, tabular comparisons
Internal linkingNo orphan pages, link counts within range, trailing slashes, no dead internal links
Publication cadenceWeekly volume ceiling, schedule length, timezone of the publish gate

Why does the publish gate use Manila time?

Because comparing dates in UTC marks anything published before 08:00 local as belonging to the previous day, which drops same-day pages out of the sitemap.

The gate therefore formats the current date in Asia/Manila and compares calendar dates as strings. A page whose publish date has not arrived has no route generated at all, so it cannot be reached directly, does not appear in any listing, and is absent from the sitemap. Hub pages build their child lists from the same filtered set, which is why no link on this site can point at a page that has not yet been published.

What is deliberately absent?

Ratings, rankings, review markup, projections presented as data, and any figure without a source date.

The review markup exclusion is enforced as an automated check rather than left to discipline. Emitting rating markup without collected ratings is fabricated review data under Google’s spam policies, and a site whose entire claim is accuracy cannot afford it. The reasoning is set out further in about, the registers themselves in the licence section, the archived series in official PAGCOR data, and the author’s commercial interest on the author page.

What external standards does this site hold itself to?

Google’s published spam policies, plus a self-imposed rule against reproducing a source without adding to it.

Two of those policies bind directly. Google’s spam policy documentation defines scaled content abuse as generating many pages primarily to manipulate rankings rather than to help users, and treats fabricated review data as a violation regardless of the intent behind it. That is why no page here emits Review or AggregateRating markup and why an automated check blocks publication if one appears. The policy page carried a last-updated date of 15 May 2026 when we last read it, the revision that added manipulation of generative AI responses to the definition of spam.

The enforcement cadence matters as much as the policy text, and it is easy to misread from headlines alone. Google ran three spam updates during 2026, the most recent logged on its Search Status Dashboard at 09:27 Pacific on 18 August 2026 and described as applying globally and to all languages, as documented by PPC Land. None of the three targeted link spam. Read alongside the March core update’s stated targets, the direction is content-level enforcement rather than link-level, which is why the checks behind this site weight originality and sourcing far above anything to do with backlinks.

Frequently asked questions

Where do the figures on this site come from?

PDFs published by PAGCOR at pagcor.ph. Nothing is taken from secondary coverage, and no figure is republished without the as-of date printed on the source document.

How are the PAGCOR PDFs parsed?

With pdfplumber, filtering the watermark by its fill colour and cropping the caution column by x-coordinate. Both steps are necessary; a plain text extraction returns corrupted operator names.

What checks run before a page is published?

An automated audit covering content quality, machine-writing surface markers, sourcing, structured data, internal linking and publication cadence. Any blocking failure stops publication.

Disclosure. LegitPH is written by Eric, founder of RedClaw, a performance-marketing agency whose clients include iGaming operators. We publish no ratings and take no payment for placement in any list on this site. How we source and check every figure is set out in our methodology.