Skip to content

Prospect Segment & Category Attributes — Digital-Footprint Profiles

A digital-footprint profile of every business segment (and category) in the prospect universe: how many are listed vs NOF, how many have a Google place_id / website / were crawled, what tech and CMS they run, how deep their sites are, and how many sit on a dead domain. This is the raw material for product targeting (e.g. which segments are greenfield for BizSite, which already run ecommerce) and for segment-level opportunity sizing.

Built by scripts/crawl-tail/build-segment-attributes.cjs (segment grain) and build-category-attributes.cjs (segment × category grain). Keyed on the canonical b_segment (17-segment scheme) resolved via gp_category_segment + the CATEGORY_MAPPING Google→GP bridge, plus an Uncategorised residual (= 18 rows). Snapshot: 2026-06-03, 228,832 in-universe rows (grown from ~210K via the book / SERP-harvest sweeps — both tables below share this universe). Related: Prospect Enrichment & Opportunity Index, Prospect DB — Composition.


Segment profiles (17 segments + Uncategorised, in-universe — 228,832 total)

Section titled “Segment profiles (17 segments + Uncategorised, in-universe — 228,832 total)”

place_id% / website% are of the segment’s universe; crawled% is of the segment’s websites — crawl coverage of the addressable site pool (has_crawl_data ÷ with_website), not of universe, so a low-website segment doesn’t read as “uncrawled”. ecom / analytics are listing counts with that signal detected. dead = domains confirmed NXDOMAIN.

SegmentUniverseNOFplace_id%website%crawled% (of sites)Main CMSecomanalyticsdead
Home Services37,9816,45135.9%41.0%90.9%WordPress2,2139,706800
Retail36,7116,74845.9%47.5%85.6%WordPress5,07910,457541
B2B32,3396,15843.7%55.2%89.1%WordPress3,34910,882683
Other22,8196,62451.6%54.9%90.3%WordPress2,5547,965430
Health & Wellbeing19,4844,65547.8%53.9%88.2%WordPress1,7576,512360
Eat, Drink, Takeout13,6884,06059.8%43.8%81.5%WordPress9683,095113
Finance, Property & Legal12,4812,11151.5%58.2%89.6%WordPress4784,598114
Vehicle11,7292,81349.6%53.4%87.6%WordPress6124,090183
Personal Care7,9291,93156.9%40.1%80.3%WordPress6891,749125
Travel7,9171,84551.4%50.5%88.9%WordPress3892,30391
Leisure6,2801,84753.3%59.2%84.5%WordPress5892,18963
Learning4,8861,24759.3%63.3%88.2%WordPress4601,96657
Gov4,75637930.5%78.9%93.9%Drupal503,0185
Agri2,95348539.0%31.1%90.0%WordPress27157226
Personal Development2,83042035.5%63.4%93.9%WordPress2311,43226
Uncategorised2,06134921.7%90.9%91.7%WordPress146800216
Communication1,01117843.0%52.9%89.0%WordPress10928634
Insurance Agents, Brokers & Consultants97716452.3%67.3%90.6%WordPress423955

Reading the profiles:

  • WordPress dominates every segment except Gov (Drupal). CMS mix (cms_* columns in the CSV) is a build/rebuild-fit signal — DIY-builder share (Wix/Squarespace) vs custom.
  • Low website% = greenfield (Personal Care 40.1%, Agri 31.1%, Home Services 41.0% have a site) — the no-website pool for entry-level web products. (Crawl coverage of the sites that do exist is uniformly high — 80–94% across every segment — so crawled% now reads as completeness, not gap.)
  • High ecommerce = storefront segments (Retail 5,073, B2B 3,348, Home Services 2,213) — where a one-page site is not sufficient.
  • analytics / with_g_ads / pixel columns flag already-marketing-active businesses (warmer for paid services).

Of each segment’s websites (in-universe, http*), the crawl outcome so far plus the signals detected. Outcome buckets are mutually exclusive (priority dead › social-only › blocked › slow/other-error › fully-crawled › pending) and sum to Websites. Social-only = the “website” is a Facebook/Instagram/etc. page, so there’s no real site — never crawled (a SitePro/BizSite greenfield signal, not a backlog); pending = a real site still queued. Feature & CMS counts are what the crawl detected (a site can carry several; CMS counts are among reachable sites). Ecom* is the shallow-crawl ecommerce signal — pre full-crawl confirmation. Built by scripts/crawl-tail/build-crawl-coverage.cjscrawl_coverage_by_segment.csv.

Refreshed 2026-06-08 — shallow crawl complete. This table is re-run on the finished shallow sweep, so Pending has drained (11,191 → 4,774) and Fully crawled has risen (81,956 → 87,283, 70% → 75%). The Segment profiles and Contactability tables above/below still carry the 2026-06-03 snapshot — they’ll be refreshed once the deep (full) crawl completes, since deep-crawl results confirm Ecom* and the page-depth signals they depend on. Deep crawl in flight: ~33K done, ~64K reachable sites still queued at ~630/hr.

SegmentWebsitesDeadSocial-onlyBlockedSlow/otherFully crawledPendingBookingEcom*GA4Google TagMetaTikTokWordPressWixShopifySquareOther CMS
B2B17,8546831501,0561,93113,2387961,2503,40111,5771,2611,193606,278993478496452
Retail17,4525415791,3831,55212,6057921,3255,41011,2802,1781,8861243,8776772,291306251
Home Services15,5268003568341,61311,3965271,2222,17610,102999924395,3571,444213340350
Other12,5214302368551,1939,4004071,3692,5768,3889271,068594,330792355451392
Health & Wellbeing10,5053602164729918,0324342,8681,7716,927468890333,702957103525245
Finance, Property & Legal7,263114114697165,6752783234554,913322405112,7543205188124
Vehicle6,3191831453544344,7554486876074,2593161,435631,4462767864127
Eat, Drink, Takeout5,9961135323554854,2692429439873,333231576461,51629318033957
Travel3,99791322304423,0391631,5904022,48430736991,221153149270
Gov3,75157983493,2316180503,163186004861507818
Leisure3,71863893422662,7941646875902,477143471191,2151744813980
Personal Care3,1791253771352632,1641151,0677141,8481142891178418911814831
Learning3,09457311503542,3601423004612,114161397281,0871972714668
Uncategorised1,873216191123301,122749016685082110336751462642
Personal Development1,795261360991,545521432271,46841882704235610542
Agri9192633448670129742685955375534570552016
Insurance Agents, Brokers & Consultants65851254455726304142023633280201622
Communication535348145540024311123044638016419251016
TOTAL116,9553,8722,8356,98811,20387,2834,77414,07920,41476,5027,69010,33751535,9136,8754,0433,4083,203

Reading the crawl (2026-06-08, post-shallow):

  • Coverage is now 75% and clean — of 116,955 sites, 87,283 (75%) fully crawled (up from 81,956/70%), ~3.3% dead, ~6.0% blocked, ~9.6% slow/other-error. With the shallow sweep finished, pending has collapsed to 4,774 (~4.1%)real sites still queued (the small residual tail + newly-added rows), down from 11,191 — and social-only (2,835, ~2.4%)not a backlog, see below.
  • Social-only (2,835) = greenfield, not a crawl gap — these listings’ only web presence is a Facebook/Instagram page, so there’s no site to crawl (deliberately excluded). They’re a BizSite / SitePro prospect list (their social URL is in Superset urls_urls): Retail 579, Eat/Drink/Takeout 532, Personal Care 377, Home Services 356, Other 236, Health 216, B2B 150, Vehicle 145 lead.
  • Blocked (6,988) + slow/other (11,203) = the recovery backlog — the targeted deep-crawl and the Ahrefs-on-403 fallback chip away at these rather than leave them dark.
  • Ecom* (20,414) is the shallow signal, not confirmed storefronts — the full crawl validates it; Retail (5,410) and B2B (3,401) lead.
  • GA4 (76,502) is near-universal; ad pixels are the gap — Google Tag 7,690, Meta 10,337, TikTok just 515. Pixel presence is a paid-readiness signal (warmer for ads).
  • WordPress (35,913) is ~4× the next platform; Shopify (4,043) concentrates in Retail, Gov skews to “Other CMS” (818, mostly Drupal/gov platforms).

A full-universe consent split — every in-universe listing lands in exactly one of five mutually-exclusive tiers, so the whole prospect base is accounted for in one table (the tiers sum to Universe). Reach needs an emailEmail is the only marketing-reachable tier; a listing with only a phone is a call list, split mobile (call/SMS) vs landline (call only). Email % is of the segment’s universe. Built by scripts/crawl-tail/build-contactability-tiers.cjs (re-run any time → contactability_tiers.csv). Snapshot 2026-06-08. The same split is also cut into two children below — On file (a record we hold) and Not on file (net-new).

SegmentUniverseEmailEmail %Mobile-onlyLandline-onlyOpted-outDark
Home Services37,88614,50938%6,4177,1739,554233
Retail36,71112,53234%3,01311,7858,930451
B2B32,33912,14838%3,0927,4389,280381
Other22,8198,92339%2,6435,0045,533716
Health & Wellbeing19,4847,71240%2,6594,4474,384282
Eat, Drink, Takeout13,6883,25324%9957,1661,773501
Finance, Property & Legal12,4814,84139%4832,9254,18547
Vehicle11,8243,73832%1,7842,4303,721151
Personal Care7,9292,30929%1,2522,9091,302157
Travel7,9172,78435%7161,8412,315261
Leisure6,2802,19935%7531,5781,316434
Learning4,8861,90239%4901,0241,40268
Gov4,7561,10023%5198112,31511
Agri2,95372825%2421,29861075
Personal Development2,8301,22043%44973338642
Uncategorised2,06173035%15133674599
Communication1,01131831%783302814
Insurance Agents, Brokers & Consultants97741643%201883476
TOTAL228,83281,36236%25,75659,41658,3793,919

Universe-wide: of 228,832, only 81,362 (36%) are email-reachable — the real marketing-reach number. A further 25,756 (11%) are mobile-only and 59,416 (26%) landline-only (call lists, no email). 58,379 (26%) are opted-out of marketing (correctness + onboarding only), and 3,919 (1.7%) are dark. The five tiers are mutually exclusive and sum to Universe. (Counts drift slightly as the live crawl keeps adding emails; the table is one consistent run.)

The five tiers (priority — opted-out pulled out first, then email > mobile > landline):

  • Email (81,362, 36%) — not opted-out, and has a usable email: a consented email (opted_in = TRUE in mc_opted_in_20260326, the Mailchimp consent snapshot), or — for a prospect with no opt-out on record — a crawl_email (our webcrawl of the site) / outreach_email (harvested from the SerpAPI/competitor archive). This is the only marketing-reachable tier.
  • Mobile-only (25,756, 11%) — not opted-out, no usable email, but has an Irish mobile (083/085/086/087/089, +3538x). A call/SMS list, not email-reachable.
  • Landline-only (59,416, 26%) — not opted-out, no usable email, no mobile, but has a landline. Call-only.
  • Opted-out (58,379, 26%) — subscriber in the consent DB with opted_in = FALSE: a recorded marketing “no”. No marketing of any kind (email or call) under the conservative framing — contactable only for listing-correctness and onboarding (service basis), via phone or a non-marketing email. Heaviest in Home Services (9,554), B2B (9,280), Retail (8,930), proportionally Gov (49%). The cohort the marketing-email DB exists to protect — never fold it back into a marketing send.
  • Dark (3,919, 1.7%) — not opted-out, but no email of any kind and no phone anywhere. The pl_original net-new harvest tail with no website, no place_id and no phone — the only genuinely unaddressable residual.

Child 1 — On file (199,026: a GP listing or a subscriber)

Section titled “Child 1 — On file (199,026: a GP listing or a subscriber)”

Businesses we already hold a record for — a GoldenPages listing_id or a subscriber_id (current/past customers + the GP directory). This is the correctness, re-engagement and upsell base: we know who they are. Every opted-out row lives here (opt-out is subscriber-keyed), and dark is near-zero (105) — we almost always have a phone on file. Email reach 71,289 (36%).

SegmentUniverseEmailEmail %Mobile-onlyLandline-onlyOpted-outDark
Home Services33,60612,79438%4,9476,2899,55422
Retail33,62311,71935%2,19610,7618,93017
B2B28,76010,64337%2,3376,4849,28016
Other17,6347,01140%1,4023,6735,53315
Health & Wellbeing16,3306,46940%1,6943,7774,3846
Eat, Drink, Takeout11,0902,74525%5556,0151,7732
Finance, Property & Legal11,5644,40438%3692,6004,1856
Vehicle10,0313,23632%1,0422,0253,7217
Personal Care6,7822,09031%7322,6551,3023
Travel6,8342,47036%4371,6092,3153
Leisure5,1001,85636%4971,4281,3163
Learning4,1151,60339%3347761,4020
Gov4,6751,08423%5137622,3151
Agri2,61763624%1461,2246101
Personal Development2,5821,13044%3716923863
Uncategorised1,86971438%1202907450
Communication91530033%343002810
Insurance Agents, Brokers & Consultants89938543%111563470
TOTAL199,02671,28936%17,73751,51658,379105

Child 2 — Not on file (29,806: net-new, no listing or subscriber)

Section titled “Child 2 — Not on file (29,806: net-new, no listing or subscriber)”

Truly net-new prospects — no GP listing_id and no subscriber_id (≈ FCR’s operational NOF; the pl_original / SERP-harvest pool). The cold-acquisition base. No opt-out is possible here (opt-out is subscriber-keyed → column is 0), so the consent question is open; but it carries all but ~105 of the dark residual (3,814) — net-new with no channel at all. Email reach 10,073 (34%).

SegmentUniverseEmailEmail %Mobile-onlyLandline-onlyOpted-outDark
Other5,1851,91237%1,2411,3310701
Home Services4,2801,71540%1,4708840211
B2B3,5791,50542%7559540365
Health & Wellbeing3,1541,24339%9656700276
Retail3,08881326%8171,0240434
Eat, Drink, Takeout2,59850820%4401,1510499
Vehicle1,79350228%7424050144
Leisure1,18034329%2561500431
Personal Care1,14721919%5202540154
Travel1,08331429%2792320258
Finance, Property & Legal91743748%114325041
Learning77129939%156248068
Agri3369227%9674074
Personal Development2489036%7841039
Uncategorised192168%3146099
Communication961819%443004
Gov811620%649010
Insurance Agents, Brokers & Consultants783140%93206
TOTAL29,80610,07334%8,0197,90003,814

(The two children sum to the parent, segment by segment. On file vs not-on-file = a GP listing_id or subscriber_id present vs neither. Built by the same build-contactability-tiers.cjs run → contactability_tiers_onfile.csv / contactability_tiers_notonfile.csv.)

Consent rules baked in:

  • The flag is the consent, not the table. mc_opted_in_20260326 holds both TRUE and FALSE rows — presence is not consent. Email-marketable = opted_in = TRUE, or (for a prospect with no opt-out record) a crawl_email/outreach_email. We never email a recorded opt-out, and the raw Superset listing emails field is not a separate channel — opted_in is the consent layer over it.
  • Opt-out is subscriber-keyed. Net-new NOFs / non-subscribers have no subscriber_id, so they can be neither opted-in nor opted-out — they reach the Email tier only via a crawl_email/outreach_email; otherwise they fall to the mobile/landline tiers or dark.
  • Phone is drawn from five sources, deduped: spine phone, website crawl_phone, the GoldenPages listing phone (dim_listings_with_subscriber_id.phnumbers by listing_id), the GBP phone (dim_place.phone), and the same listing phone looked up by subscriber_id (the fallback for account-only stubs whose listing_id is null — this recovered ~12.8K stubs that had read as falsely “dark”).

What changed (2026-06-08). This replaces the earlier reachable-waterfall + unreachable-tail tables, and tightens “reachable” to email-only. The old waterfall counted phones (and even opted-out crawl-emails/mobiles) toward “reachable”, inflating it to ~130K/57%. The tiers instead pull opted-out out first, require an email for the marketing-reachable tier, and account for the whole universe in one place. Net: true email reach is 81,362 (36%); phone-only is surfaced as mobile 25,756 + landline 59,416 (call lists, not email-reachable); 58,379 opted-out are an explicit correctness/onboarding cohort; 3,919 dark. The same split is then cut into two children — On file (199,026) vs Not on file (29,806) — below.

The CSVs carry ~45 columns per row. Beyond the summary above:

  • Counts: listed, nof, universe, with_place_id, place_id_synthetic (LST: stubs), with_website, crawled.
  • Tech signals: with_booking, with_ecommerce, with_analytics, with_g_ads, with_meta_pixel, with_tiktok_pixel, with_schema.
  • CMS distribution: cms_wordpress / cms_wix / cms_shopify / cms_squarespace / cms_drupal / cms_webflow / cms_joomla / cms_duda / cms_mono / cms_other / cms_none, plus the derived main_cms.
  • Site depth (page-count buckets): pages_0_index_unwalked, pages_0_empty, pages_0_other, pages_1, pages_2_5, pages_6_10, pages_10plus, plus pages_no_website, pages_site_uncrawled, pages_crawled_no_count and pages_known_pct_of_sites.
  • Dead-domain: dead_nxdomain, dead_on_gp, dead_on_gmb, active_client_dead (a paying client on a dead domain — escalate).

build-category-attributes.cjs produces the same columns at (segment × category) grain — 4,446 rows, one per primary_category — ordered by universe. It aggregates into a BigQuery table then paginates out past the 500-row API cap. Use it to drill a segment into its categories (e.g. Eat, Drink, Takeout → Restaurants 4,030 / Public Houses 3,881), which is the grain product targeting actually works at — see the BizSite category-prioritisation analysis. Full data: segment_category_attributes.csv / the category-attributes BQ table.

Regenerate both with the build scripts; counts drift as the crawl/enrichment refreshes.

Ask the docsRAG over this site
Ask anything about the FCR Dashboard platform — architecture, BigQuery, the worker routes, billing rules, the LRC stack, scoring… Answers are grounded in this documentation, with source links.
How does the deal-brief refresh work? Which routes are Worker vs n8n? How is account health scored?