Where every captured lead, call intent, and cross-site referral flows to become revenue — the sibling product that turns Doozer traffic into qualified leads.
leadbuilder.io is a BerrySmart sibling product: the lead-intelligence platform that Doozer feeds. If Lead Capture is the plumbing, LeadBuilder is the destination and the intelligence layer — where a visitor's action on a business site becomes a qualified, attributable lead a business will pay for. It is the primary way Doozer's traffic turns into revenue (see the value model).
Every demand signal on the network bridges to LeadBuilder:
nbmnLeadRouteToBusiness() and piped in by leadCaptureBridgeToLeadBuilder().
lead_intents) bridge here.renderLeadBuilderSnippet() mounts a lightweight tracker onbusiness + directory pages, recording sessions and events to the lb_* tables (lb_users, lb_sessions, lb_events, lb_follows).
fire sendBeacon → the track_network_referral endpoint → a click_network_referral lb_event on the SOURCE site, so movement across the network is attributed, not lost.
A free Doozer site creates presence; LeadBuilder captures the value that presence generates and makes it measurable and sellable. lb_users.tier also carries the entitlement that Billing sells, so the same identity spans the free site, the lead intelligence, and the paid tier. It is the revenue engine of the flywheel, and the reason "we build a free site" is a sustainable business rather than a cost center.
LeadBuilder also owns the network's Google Search Console pipe — the search demand data that powers Prospector's Cloud Radar and the marketing signal miner. includes/lb-gsc-client.php is a dependency-free OAuth 2.0 + Search Analytics client. Operator connects GSC properties (Admin → LeadBuilder → GSC Properties); refresh tokens are stored encrypted in lb_gsc_properties. lbGscSyncProperty($propertyId, $daysBack) pulls query + page aggregates into lb_gsc_query_daily / lb_gsc_page_daily. GSC Search Analytics is free — no per-call cost.
Freshness is a background job. lbGscMaybeQueueRefresh() runs from the index.php shutdown tick (rate-limited 6h) and enqueues a per-property gsc_refresh job when a property's last_synced_at goes stale (>20h); the job dispatcher runs the sync. Built v2.2.364 — before that the scheduler was referenced in a comment but never existed, so ingestion silently died after one manual sync (May 2026) and Cloud Radar ranked on a frozen snapshot.
Two durable gotchas (v2.2.364): (1) refresh tokens are encrypted with ENCRYPTION_KEY; a key rotation breaks decryption unless the decrypt tries the legacy keys — lbGscDecryptTokenEx() now uses doozerLegacyEncryptionKeys() + self-heals (re-encrypts with the current key). (2) If the Google OAuth consent screen is in "Testing" mode, refresh tokens expire after 7 days → invalid_grant → dead pipe. Fix: publish the consent screen to production + reconnect the properties. Dev API gsc (status / sync / scan) drives + diagnoses it all.