# Method

## Crawl date

The homepages were fetched and archived on 2026-09-04. Nothing was fetched to
build this dataset: it is a pass over the stored pages.

## Fetch method

One homepage per domain, fetched through a rotating proxy with a browser user
agent and rendered in a headless browser, so that forms injected by tags and
scripts are present. A plain fetch finds a fraction of the signup forms a
rendered page shows. The plain fetch stands in only where there is no usable
rendered record: 72 Inc 5000 domains and 144 Y Combinator domains, none in the
Fortune 500 or the unicorn list. A stored page is capped at 1,500,000
characters.

## Counting rules

- **N1 provider_form**: a named email provider's signup form or embed. A form
  marker (a `list-manage.com/subscribe` action, a `klaviyo-form` div, an
  `app.kit.com/forms` action, `embeds.beehiiv.com`, a Substack embed, and so
  on) counts wherever it appears on the page. A context marker, which is what
  a general form builder or a messaging SDK leaves behind (HubSpot, Marketo,
  Pardot, Salesforce web-to-lead, Zoho, Typeform, Jotform, the Klaviyo onsite
  script, Braze, Iterable, Customer.io, Drip, Omnisend, Brevo tracking),
  counts only when the marker sits inside a `<form>` element whose visible
  text, plus 400 characters either side, carries a newsletter word.
- **N2 email_capture**: a `<form>` with an email input whose visible text plus
  400 characters either side carries a newsletter word and no exclusion word.
- **N3 newsletter_link**: an anchor whose URL path or visible text contains
  "newsletter", or that points at a Substack, beehiiv, Buttondown, Ghost, Kit
  or LinkedIn newsletter host. The host is compared after parsing, not as a
  substring, so `docs.safetykit.com` is not a Kit page.
- **newsletter_strict** is N1 or N2. **newsletter_any** is N1 or N2 or N3.

### Newsletter words

newsletter, sign up for updates, get updates, stay in the loop, stay up to
date, in your inbox, to your inbox, join our list, join the list, weekly
digest, monthly digest, get the latest, subscribe, and "join N readers" or
"join N subscribers". "subscribe" is matched as `(?<!un)subscribe`: the
consent line "you may unsubscribe from these communications at any time" sits
under demo and contact forms all over the web and turned every one of them
into a newsletter in the first pass.

### Exclusion words

password, log in, sign in, create account, book a demo, request a demo,
contact us, get a quote, apply now. A form whose window carries one of these
does not count, whatever else it carries.

### Visible text only

Script, style and select blocks are stripped and the context window is cut
back to whole tags before the words are matched. Hidden input names, CSS
variable blocks, inline JS and dropdown options carry the word "subscribe"
under forms that have nothing to do with a newsletter.

## Precision

25 random positives per signal, drawn with seed 1 across all four groups after
sorting by group and domain, each opened in the archived HTML and judged by
eye. One false positive in each of N1, N2 and N3: 4.0% per signal. The whole
rule set went through five rounds of tightening against fresh samples before
that; the untightened first pass measured 27.6% newsletter_strict on the Inc
5000 against 15.8% now.

## Recall on the Fortune 500

60 Fortune 500 homepages were opened and read: the top 20 by rank, plus the
first 40 counted negatives from rank 21 down, which run to rank 63. Of those
60, one is a counted positive and correct. Of the 59 counted negatives:

| Finding | Domains | Share of the 59 |
| --- | ---: | ---: |
| A signup form on the page that the rule did not count | 6 | 10.2% |
| A subscribe or preference-centre link only, no form | 10 | 16.9% |
| Nothing | 43 | 72.9% |

The six uncounted forms are Home Depot ("sign up for emails with savings and
tips"), Kroger ("sign up to receive the latest Kroger news and releases"),
Goldman Sachs (an email field whose only nearby wording is "you can
unsubscribe at any time"), Target ("get top deals, latest trends, and more"),
Alphabet (a mailing list template that exists only in inline JS) and Costco (a
signup widget inside a JSON blob on a page cut at the cap). The ten
preference-centre links include Chevron, ExxonMobil, JPMorgan Chase, Nvidia,
Boeing, Dell, Ford, Freddie Mac, Procter & Gamble and Albertsons.

The pattern is one shape: a large company puts email signup behind a link to a
preference centre and names it something other than a newsletter. The Fortune
500 figures here are a floor, and the floor is lower for the largest companies
than for the smallest. Full results in
`research/drafts/owned-media/handcheck_top20.csv` and
`research/drafts/owned-media/fortune500_recall_21_60.csv` in the Installmap
repository.

All 24 Fortune 500 newsletter_strict positives were also read by hand: 23 are
correct. The one false positive is Alaska Air Group, where a Mailchimp
subscribe URL for a travel agent newsletter sits inside the navigation JSON
rather than in a form on the page.

## Truncation

588 of the 11,743 stored pages hit the 1,500,000 character cap: 263 Inc 5000
(5.4%), 228 Y Combinator (4.2%), 22 Fortune 500 (4.7%) and 75 unicorns (7.5%).
A footer signup box past the cap is invisible to this pass, and footers are
where signup boxes live, so every count here is a floor. Truncation is flagged
per domain in the feature table, so any share can be recomputed on the
untruncated subset.

## What the number is not

Every figure is a signal on one homepage. A provider count says the provider's
form is on the homepage, not that the company is a customer: a company that
runs Klaviyo campaigns with no homepage form is not counted, and neither is a
signup that lives on a /subscribe page. The Klaviyo count here is far smaller
than the count of Inc 5000 domains carrying the Klaviyo onsite script, which
is a tracking tag on any store using Klaviyo.

## Floors

- A share is not published on a base under 20 domains; it prints `n/a`.
- A count of one to four prints `<5`.

## Funnel

| Step | Inc 5000 | YC | Fortune 500 | Unicorns | All |
| --- | ---: | ---: | ---: | ---: | ---: |
| Domains on the list | 4,969 | 6,133 | 500 | 1,111 | 12,713 |
| Archived record scored | 4,923 | 5,969 | 472 | 1,000 | 12,364 |
| Usable record, counted (base) | 4,885 | 5,386 | 472 | 1,000 | 11,743 |
| No scored record | 46 | 164 | 28 | 111 | 349 |
| Record unusable (status 400 or over, or empty body) | 38 | 583 | 0 | 0 | 621 |

The 583 Y Combinator drops are acquired and shut down companies whose domains
now answer 404, 403 or 502.

## Licence

Data: CC BY 4.0, Installmap, 2026-09-04.
Source: Installmap, September 2026.
