Full pipeline from raw scraped sites through classification, CRM upload, verification, outreach and signups.
Funnel — Shopify App Signups
Live
Merchants who installed the AmbassadorFlow Shopify app. Each install lands here as a lead (status signed_up → installed → active). Detected via the Shopify Partner API poller.
Funnel — Shopify Brands
Funnel — WooCommerce Brands
Funnel — Agencies
Funnel — Shopify Agencies
Funnel — WooCommerce Agencies
Funnel — Clutch Shopify Agencies
Funnel — Clutch eComm Marketing Agencies
Funnel — SaaS Partners
Funnel — Job Boards
Funnel — Reviews
Funnel — Expos
Competitor Review Leads
loading…
Brands that left negative reviews on competitor Shopify apps, resolved to named decision-makers via MoltSets + website scraping. In-policy leads (≤12 months) get a personalized LinkedIn DM via SendPilot. The Message Variants section below groups leads by complaint scenario so you can review and improve each message over time.
Get Leads
loading…
How much of our Swedish Shopify base the GetLeads database (334M contacts) actually covers,
measured shop by shop with free count calls — credits are only ever spent when a record is
pulled. The sweep runs on the Mac and mirrors here every 20 seconds; the panel refreshes
every 15 while it moves. Every contact bought so far is listed at the bottom.
loading…
Pipeline Flow
loading…
Scrape → classify → verify, end to end. Each stage hands to the next automatically: a page classified a minute ago is in the verifier’s queue a minute later. Auto-refreshes every 15s while open.
Site Traffic
loading…
Every request to ambassadorflow.com, from the Vercel drain. Vercel forgets its own logs after about a day; this keeps 14. Deliveries are batched, so a visit takes up to a minute to appear.
Live Scrape Feed
loading…
Every site streamed live from any running scrape or classification. Raw scrapes keep a rolling window of the most recent ~5,000 sites; classifications persist in full. Auto-refreshes every 8s while open.
MoltSets enrichment — live feed
Decision-maker emails scraped on MoltSets, biggest shops first. Auto-refreshes every 30s.
Leads collected
Yield by band — emails/company; empirical where processed, estimated otherwise
Start or restart the long-running jobs. Restarting is safe: an interrupted batch writes
nothing for the rows it did not finish, so they simply come round again.
Loading…
Script vs model
loading…
What the Python scrapers produced, and what gemma judged on top of it. Every row passes
through the scripts; only a subset reaches the model.
Daily sending
— emails sent against the cap, and the positive replies they earned
Loading…
Live campaigns
— sending right now: today's emails, and the positive replies they earned
Loading…
Results — what the sending has earned
–
Emails per positive reply ↗
–
Positive replies ↗
read them
–
1 · Installed app ↗
–
2 · + Plan activated ↗
–
3 · + Embed live ↗
AmbassadorFlow revenue — what these stores pay us
–
MRR — subscriptions
–
Fee this month
–
Stores referring ↗
Billed by month
Plan mix
Store revenue — what the installed shops are selling, as APP has measured it
–
30-day store revenue ↗
–
Live stores ↗
–
Not live yet ↗
–
Stores measured ↗
–
Last full month
By month
Biggest stores ↗
This system's campaigns — the SE and US runs built and sent here; the 2025 lists are not counted
–
In our campaigns ↗
–
Replied ↗
–
Interested ↗
–
Waiting on you ↗
–
Meetings ↗
–
Signed up ↗
–
Live inboxes ↗
–
Classified by Gemma ↗
Sending & deliverability — volume against capacity, and whether the mail is landing
Loading…
Lead pipeline
— scrape → classify → verify: how fast each is running, and when it finishes
Loading…
Leads still queued
— how much each live campaign has left, and how long that lasts
Loading…
System health
Live
Scrapers, sending capacity, inbox health, and data freshness across the stack.
Loading…
GTM Agencies — 4 Pipelines + Brands
~75% Complete
Four parallel agency pipelines (Shopify, WooCommerce/Clutch, Clutch Shopify, Clutch eComm Marketing) plus a brand-direct pipeline. Each follows: scrape → enrich → score → campaign → outreach → CRM.
Secondary Shopify agency source from Clutch.co (not the official Shopify Partner Directory). Includes non-partner agencies + verified Clutch reviews. DB: Clutch-Shopify-Agencies
1ScrapeEnriching—
Directory listing scrape
Done~10,104 agencies
Profile enrichment
~In progress
Website URL extraction
0%waiting
2EnrichPendingWaiting for scrape
Website text scraping
0%waiting
AI intel extraction
0%waiting
3ScorePendingNot started
Lead scoring
0%waiting
4CampaignPendingNot started
Dedup vs Pipeline 1
0%waiting
Campaign generation
0%waiting
5OutreachPendingNot started
Email verification
0%waiting
ReachInbox upload
0%waiting
Pipeline 4: Clutch eComm Marketing Agencies
Re-scraping directory
Broader e-commerce digital marketing agencies (not platform-specific). These are marketing-first agencies — email, growth, retention, SMS, paid ads — with higher propensity to work with DTC brands. DB: Clutch-Ecomm-Marketing
1ScrapeEnriching—
Directory listing scrape
Done~14,152 agencies
Profile enrichment
~In progress
Website URL extraction
0%waiting
2EnrichPendingWaiting for scrape
Website text scraping
0%waiting
AI intel extraction
0%waiting
3ScorePendingNot started
Scoring
0%waiting
4CampaignPendingNot started
Dedup vs Pipelines 1–3
0%waiting
Campaign generation
0%waiting
5OutreachPendingNot started
Email verification
0%waiting
ReachInbox upload
0%waiting
Pipeline 5: WooCommerce Brands
Classification in progress
Direct outreach to WooCommerce e-commerce brands from Storeleads data (4.6M records). Currently in the classification & rule-building phase — 13 rounds complete, learning which sites are real online stores vs. B2B/service/etc.
1DataDone4.6M brands loaded
Storeleads data loaded
100%4,613,637
2ScrapeBorderline text fill running2.25M have text · filling 34k borderline
Brand text coverage (Storeleads)
49%2.25M / 4.6M have text
Borderline text fill (AI-review)
~34,122 borderline rows (no usable text → blocks Woo classifier)
Direct outreach to Shopify e-commerce brands from Storeleads data (2.5M records). Local Gemma 4 (Ollama, free, on the Mac) is classifying the 18,513 target-vertical tier-1/2 brands in hybrid mode.
1DataDone2.5M brands loaded
Storeleads data loaded
100%2,491,156
2ScrapeIn progressBrand website text scraping
Brand website scraping
~in progress
3ScorePendingNot started (WooCommerce rules transferable)
Rule-based scoring
0%not started
E-commerce classification
0%not started
AI scoring (claude -p)
0%not started
4CampaignPendingNot started
Campaign generation
0%not started
Contact email finding
0%not started
Shared Infrastructure
Production-ready
Tools and systems shared across all four agency pipelines: enrichment engine, campaign generator, outreach tooling, CRM integration, orchestration.
✓ Built & Working
✓AI Enrichment (extract_agency_intel.py): 3-pass (keyword → Claude Haiku → self-verify)
✓Few-shot learning: intel_examples.json auto-corrects from past mistakes
All AI costs covered by Claude Code subscription (claude -p --model haiku). No per-call API charges. Biggest variable cost is ReachInbox for campaign sending.
Website & Partner Portal
~85% Complete
Next.js 15 marketing site + Supabase-backed partner portal. Full authentication, multi-tier commissions, admin dashboard. Deployed on Vercel.
Note: Supabase currently on free tier (50K rows max). Will need Pro tier ($25/mo + variable) once lead_pages + revenue_events + click_events exceed 50K rows. Vercel Pro includes Web Analytics + Speed Insights.
Competitor Monitor
Live
Weekly source monitor (Hetzner cron, Mondays 09:00) watches each competitor's pricing & feature pages and flags changes to re-verify in the comparison tables. Same alerts go to Telegram.
–
Pages watched
–
Changes logged
–
Unreachable
never
Last check
When
Competitor
Change to re-verify
Loading…
Comparison pages
35 indexed competitor comparison pages are live under ambassadorflow.com/compare (source-verified matrices; the long-tail set is noindex until it earns demand). Google Search Console wiring is pending.
Content Gaps
Live
Google Search Console queries mapped against our published pages. Opportunities are searches where we already rank in striking distance (positions ~4–20) or pull impressions without a dedicated page worth building.
–
Keywords tracked
–
Opportunities
–
Striking distance
–
Monthly impressions
Query
Pos
Impr.
Clicks
Gap
Loading…
Leads
Company
Contact
Email
Type
Status
Campaign
Last Touch
Lead Sources & Provenance
Where these leads came from and how they were filtered, from the raw database down to what we actually emailed.
The funnel
By status
By email type
Store/generic = info@, sales@, hello@ (general inbox). Named = a person's address.
Activity
Campaigns
Conversations & Auto-replies
Live from the ReachInbox unified inbox. Each thread shows the lead's reply and our auto-reply (flagged). Click a conversation to expand the full thread.
Loading conversations…
Sending Inboxes
Inbox
Name
Provider
Status
Health
Daily Limit
Sent Today
Email Sending Capacity
Selected range
This Month
Range Utilization
Daily Sends vs Capacity
Each bar is one day (emails sent vs the /day capacity). Grey bars are weekends, which are excluded from the capacity total.
Funnel
Every domain Gemma has classified, through to a reply. Filters recompute the whole funnel.
Leaks — leads that skipped a step
Lists
Gather companies from All companies, then Prepare. The checks run cheapest first —
deduplication, suppression, is-it-a-shop, platform, liveness and language are all free.
Verification is the only step that costs money, so it runs last and only ever sees
what survived.
Classification
Gemma decides whether a domain is an e-commerce shop and what it sells. Nothing may be
emailed before it has an answer here, and it runs locally, so it costs nothing but time.
Email verification
Verification is the bottleneck on every segment — there are always more leads than
deliverable addresses. A verdict is bought once and never paid for twice, and a shop whose
site is down is skipped before a credit is spent on it.
Which campaign the credits were spent for
Waiting to be verified — live, never contacted
Live — addresses as they come back
History — what each day's credits bought
Recent verification runs
Activity
Every action across the system, newest first — a reply arriving, a suppression, a stage
move, a draft written, a job finishing. The Live Feed shows conversations; this
shows what happened.
Live Feed
All companies
One row per company, newest action at the top. A company that replied on any
channel is marked blocked and every
automation skips it — see Do not contact for the full list and for
what the block has actually stopped.
Quick segments
🏢 The company ▾
What the business is, independent of us
📍 Where it came from ▾
Which list, scrape or channel put it in front of us
🎯 Fit and score ▾
How good a prospect we think it is
✉️ How to reach them ▾
Whether we hold a usable way in
📤 What we have done ▾
Our side of the conversation
💬 What they did ▾
Their side of it
🚦 May we contact them ▾
The suppression gate
🧩 What they run ▾
Detected from their site — 20,065 companies have at least one
Outreach state — across every source. Each company is in exactly one state.
Channel dots: grey = not contacted, blue = contacted, green = replied, hollow = no handle for that channel. Click a row for the full history.
Do not contact
Everyone no automation may contact, on any channel, whatever source they came from.
The block is computed from every signal at once — a reply, a hand-written message, a
booked meeting, a signup, an unsubscribe, a Telegram pause, a manual stop — so email
cannot keep sending to someone who already answered on LinkedIn.
An out-of-office auto-reply does not block.
Blocked sends — what the suppression actually prevented
The list
All shops
Outreach state — where the shops in this list stand right now. "This list" is our built candidate pool: every domain our scrapers pulled in and Gemma classified, plus leads that entered outreach. Not all of Shopify. Each shop is in exactly one state.
Channel dots: grey = not contacted, blue = contacted, green = replied, hollow = no handle for that channel. Click a row for the full history.
Angles
One angle is one argument for why a visitor should come back, not one ad. Two angles
from the same territory are a copy variation rather than a test, so a wave is
built by taking the best angle from each territory instead of the loudest five
overall. Headlines are capped at 40 characters and descriptions at 30 because the
platforms truncate past that; the limit is enforced here, in the API and in the
database, so copy that saves is copy that exports.
Experiments
One row per angle × audience. The Meta ad-set id is recorded here when the
upload comes back, because Meta reports spend against an ad set and knows nothing
about our angles — that mapping has to be written down when the ad set is made,
not reconstructed from ad names later. An ad set is not a test until it has run three
weeks, and cost per signup is the number to judge it on, never CTR.
Angle
Territory
Audience
Status
$/day
Meta ad set
Started
Build
Pick who the ads are for. Every angle written for that buyer appears below with its
creative and the copy that ships with it — the call-out already applied, exactly as
it will read in the upload. The words and the picture are on one page because they are
one ad.
+
Creative
The same creative/template.html the PNG renderer uses, rendered here in the
browser — so what you see is what uploads. Edit the wording in Angles; this
reflects it on save. Download writes a PNG named exactly as the
Image File Name column in meta_bulk.csv, so dropping the files
into Meta’s bulk import makes the sheet resolve by name.
Results
What each angle cost and what it produced. Spend comes from Meta against an ad set;
outcomes come from our own ads_touch rows, keyed on the utm_term
the generator stamps with the angle id. Judge on cost per signup, never on CTR —
the loudest angle and the one that converts are usually not the same ad. An angle needs
three weeks before it means anything, so days is shown next to the money.
Angle
Territory
Spend
Landings
Leads
Signups
Cost/lead
Cost/signup
Days
Verdict
Copy Studio
A segment is a saved filter, so it stays live as brands become sendable. The preview
below runs the same resolvers and the same checks the push runs, against real brands
from the segment. A lead that cannot fill a slot the body uses is excluded rather than
mailed with a gap in it.
Segments
Templates
What would this look like for …
Per-store hooks
One clause per shop, describing what it sells. Drafts are written by a model and
cannot be sent: a template using {{hook}} skips any brand whose clause you have
not approved. Editing one approves it.
Signals
Every brand with the signals the copy branches on. Checked means we fetched the
site; no programme means we fetched it and found nothing. A brand that is neither
is unknown, not clean, and is never counted as having no programme. Detection reads
server-rendered HTML and follows one hop, so a programme behind a JavaScript footer
reads as none — open a row to see the evidence a call was made on.
Domain
Brand
Category
Country
Signals
Address
Verification
Score
Loading…
Segments
The stage between the pipeline and outreach. Each segment is platform-verified live
(we fetch the site, not trust the label), the emails are cleaned for free (syntax,
dedupe, live MX, brand-match) before any MillionVerifier credit, and it is split by
verified platform. Shopify and WooCommerce become separate campaigns so a shop is
never told it is on the wrong platform.
Campaigns
Reply rate is only meaningful for campaigns this system ran. The 2025 campaigns
show 100% because only the shops that replied were ever imported,
so their denominator is the repliers themselves.
Built here
Results from ReachInbox
Reminders
Conversations where we answered last and they went quiet. Writing a reminder
creates a draft from that conversation — it is never sent until you approve it
in Drafts, where it threads back into their own email chain.
Scheduled emails
Live
Every follow-up the sequence scheduler will send, soonest first.
Move one, reword one, or cancel it — a pending step is a plan, not a promise. Stop
conditions still run at send time: a reply, an install or a manual email stops the
whole run regardless of what is listed here.
Loading…
Drafts
Nothing here sends on its own.
Approving marks a draft ready; a separate step puts it on the wire, so a mis-click cannot email anyone.
All agencies
Outreach state — where the agencies in this list stand right now
Channel dots: grey = not contacted, blue = contacted, green = replied, hollow = no handle for that channel. Click a row for the full history.
Outreach settings
Every rule the automation follows. Changes apply within 30 seconds, no restart.
Waiting for you
What the bot just did
Deploy token
So dashboard deploys stop expiring. Create a token at
vercel.com → Account Settings → Tokens
with No Expiration, scope it to the ambassadorflows
team, and paste it here. Saved to the server env file, never to the code.
…
Merchants — AmbassadorFlow APP
Their data, copied here. Click a row for every field, including the raw response.
📈 Installs per day
📥 Events received from APP
Loading…
Loading…
Pipeline Board
Everyone we are actually working. Click a card to open it; drag it to another column to move the stage.
Where the conversations are happening
Loading
…
Reply Trainer
Draft and approve auto-replies to common prospect questions. Generation runs claude -p on the server. Approve good ones to build the training set.
Loading…
Cold Email Trainer
Pick a lead from the CRM; the server reads their website and drafts a personalized first cold email. Edit and approve.
Loading…
Per-lead Reply Trainer
Pick a lead, paste their reply, and draft a personalized response based on their website. Edit and approve.
Loading…
Objection Handling
Draft and approve the best short answer to each common objection.
Loading…
Cold Email Personalizer
Write or paste a cold email; the trainer suggests the merge variables to personalize it per brand, and rewrites it as a reusable template.
Loading…
Approved Examples
Everything you've approved across the trainers. This is the corpus the replies are tuned from.
Loading…
SaaS Partners
~60% Complete
Scrape Shopify App Store, WordPress.org, and WooCommerce.com for complementary SaaS tools (email, subscriptions, loyalty, reviews, shipping) as partnership leads.
60%
Scrape 6,679 appsScored 4,698Tiered top 41Contacts 20Email finding 0.5%Outreach 0%
Scrape
3 marketplaces
→
Consolidate
4,618 leads
→
Tier & Curate
41 top-tier
→
Email Finding
0.5% have emails
→
Outreach
Not started
100%
Shopify App Store scraper
100%2,688 apps
WordPress.org scraper
100%3,523 plugins
WooCommerce marketplace
100%468 extensions
Competitor filtering
100%208 excluded
Unified CSV export
100%4,618 deduped
100%
5-point scoring engine
100%4,698 scored
AI pass for uncertain leads
100%score 25–44 band
Competitor penalty scoring
100%auto-exclude
Top-tier ranking
100%41 companies tiered
Tier 1 deep research
100%20 with program details
34%
Contact finding script
100%website + email gen
Contacts found at scale
<1%20 / 4,698
Email verification
0%MillionVerifier
0%
Outreach automation
0%not started
CRM integration
0%not started
Company validation
0%not started
Data by Source
Source
Total
Competitors
Qualified
WordPress.org
3,523
156
3,367
Shopify App Store
2,688
48
2,640
WooCommerce.com
468
4
464
Tier 1 Partnership Targets (Top 20)
Company
Category
Klaviyo
Email & SMS
Omnisend
Email & SMS
Attentive
Email & SMS
Postscript
Email & SMS
Sendlane
Email & SMS
Judge.me
Reviews & UGC
Loox
Reviews & UGC
Okendo
Reviews & UGC
Junip
Reviews & UGC
Recharge
Subscriptions
Skio
Subscriptions
Loop Subscriptions
Subscriptions
Smile.io
Loyalty
LoyaltyLion
Loyalty
Rebuy
Upsell & CRO
Replo
Upsell & CRO
Gorgias
Support
AfterShip
Shipping & Returns
Triple Whale
Analytics
Elevar
Analytics
SaaS Partners — Monthly Cost: $0
All scraping uses Playwright (free, open-source) and the WordPress.org REST API (free, no auth). Data stored in local DuckDB (free). No paid services required for current pipeline.
Future cost: Email finding (if using Hunter.io, Apollo, etc.) would add ~$50–200/mo depending on volume. Outreach automation would use ReachInbox (shared with GTM Agencies).
Job Board Scraper
~90% Complete
Scrapes 14 remote job boards daily for ambassador/referral/influencer marketing roles, filters with 50+ keywords, detects e-commerce companies, enriches with contact info.
Uses Claude Sonnet for classification (10 pain point categories) and personalized outreach. ~300–500 tokens input, ~600 output per review.
80%
SQLite deduplication
100%state mgmt
Slack notifications
100%webhook alerts
Continuous monitoring
100%monitor.py
Pricing analysis
100%scrape + report
Reddit pipeline integration
50%standalone only
Trend analysis
0%not started
Automated CI reports
0%not started
Scraper health monitoring
0%not started
Reviews — Monthly Cost: ~$0.04
Service
What For
Model
Volume
Est. $/mo
Claude (Anthropic)
Pain point classification + outreach gen
Sonnet 4.6
~50–100 reviews
~$0.04
Slack
Webhook notifications
Free (incoming webhooks)
~50 notifications
$0
Playwright
Scraping (Shopify, Trustpilot)
Free
—
$0
Near-zero cost. Claude Sonnet is only called for AI-enriched reviews (~300–500 tokens input, ~600 output per review). At 100 reviews/month this is ~80K tokens — under $1.
Trade Show Expos
~50% Complete
Scrape exhibitor lists from beauty, food, pet, and retail trade shows. 35 scrapers targeting 20+ events. Website enrichment as post-processing.
All scraping uses Playwright (free) + BeautifulSoup (free). Data stored as local JSON/CSV. No paid APIs.
LinkedIn Monitor
Built, Not Active
Playwright-based LinkedIn post comment scraper. Extracts commenter profile URLs and adds them to a Sendpilot email campaign. Includes watch mode with 5-minute polling.
40%
Scraper builtSendpilot APIWatch modeNot configuredNo production runs
100%
LinkedIn comment scraper
100%Playwright
Watch/polling mode
100%5-min interval
Config & session mgmt
100%Chrome profile
Login session detection
100%error handling
100%
Sendpilot API client
100%add leads, list
Deduplication store
100%JSON-backed
0%
Post URL configuration
0%LINKEDIN_POST_URL
Target post identification
0%high-value posts
First production run
0%never run
LinkedIn — Monthly Cost: $50–$150 (when active)
Service
What For
Est. $/mo
Sendpilot
Email campaign management for LinkedIn leads
$50–$150
Playwright
LinkedIn comment scraping
$0
Currently $0 — not yet activated (LINKEDIN_POST_URL not configured). Sendpilot cost kicks in only when monitoring starts and leads are being added to campaigns.
Other Projects & Resources
Claude Skills Production
34 reusable marketing/growth/ops skill modules with SKILL.md templates
SEO: 5CRO: 6Content: 5Sales: 3Ads: 3Other: 12
Podcast Outreach Reference
18 research docs with 100+ channel targets (podcasts, YouTube, newsletters, communities)
Docs: 18Size: ~500KB
Auto Research Ready
Autonomous ML experiment swarm — GPT training with iterative agent modifications
Framework: PyTorch 2.9Model: GPT + RoPE
Meta-Dream Daemon Running
Nightly launchd job that syncs project memory across all 9 sub-projects