Peach Payments
mSDK v2 · Target List Research
JUL 2026
Companion to the campaign planLiving document · updated as we expand

Who to
put the
ads in front of.

Building the target-company list for the mSDK v2 LinkedIn campaign: South African businesses with consumer apps that take in-app payments, assembled from public app-store data and uploaded as a Matched Audience. Method, results, and the shortlist to review, all here. It now also covers a second audience: the SA dev agencies who build these apps for other companies.

01

The approach

Our ICP qualifier is visible in public data, which most B2B lists can't say.

A company qualifies for mSDK ads if it has a consumer app that takes in-app payments. That's observable in the app stores, so we build the list from app-store and web data, then hand it to LinkedIn to match. Nothing scrapes LinkedIn; discovery happens entirely outside it.

Why category, not SDK detection. Category membership (food delivery, retail, travel, wallets) is itself the "takes payments" qualifier, and install count is the scale signal. Confirming whose payment SDK an app runs would only matter for per-company messaging, which ad audiences don't do. So SDK intelligence is deferred to a later enhancement (see the competitor-signal playbook).
02

The pipeline

Every step is a repeatable script in the project's list-builder folder.
01

Discover

Google Play + Apple charts across SA consumer categories, plus a by-name hunt for betting operators.

02

Dedupe & tier

Group apps into companies; tier by install / rating scale (T1 big or cross-platform, T3 long tail).

03

SA filter

Keep the South African companies: .za domains, then a homepage-signal pass to recover SA merchants on .com.

04

ICP flag

Drop banks, telcos, government and payment providers — not merchant prospects.

05

Review

Human tick over the ambiguous .com recoveries (this page, section 05).

06

Enrich

Resolve each company to its LinkedIn page URL (RapidAPI / Apify / spider.cloud).

07

Exclude

Remove existing Peach customers via HubSpot before upload.

08

Upload

Company Matched Audience in Campaign Manager; wait 24-48h to match, verify size clears 300.

03

Where it landed

Companies, not people — mind the units. The 300 threshold counts matched members, not companies. LinkedIn expands our companies to their employees, then filters to relevant roles; the Tier-1/2 companies alone carry enough staff to put the member pool in the low thousands. Target by job function + seniority (not narrow exact titles) to keep that pool high, and confirm the estimate in Campaign Manager before spending. Existing Peach customers, financial institutions and government are all split out of this acquisition number.
04

Acquisition targets

Verified SA merchants, not already Peach customers, with a resolved LinkedIn page. Both links clickable.
CompanyWebsiteLinkedInLeadsTierVerticals
Checked against actively trading Peach merchants only (Lightdash volume in the last 30 days) — dormant past-merchants flow back in as valid prospects. The Leads button opens the decision-makers we've indexed at that company.
05

Customers & held back

Split out of acquisition, kept on record — some are opportunities, not waste.

Existing Peach merchants are an upsell audience for mSDK (they trust Peach; the mobile SDK is a new product to them), not budget waste — decide whether to run them as a separate expansion campaign. The rest are genuinely held back.

How "existing customer" is defined: a company is excluded only if it is an actively trading Peach merchant — i.e. it has payment or processing volume in Lightdash within the last 30 days. A past/dormant merchant with no recent volume is NOT treated as a customer; it flows back into the acquisition list as a valid prospect.

Already Peach customers — upsell candidates

Tick any that should be IN the campaign, then export and share via Slack
0 to include
Include?CompanyWebsiteLinkedInPeach merchant nameTier

Excluded — financial / government

Banks, insurers and government, split out of acquisition — click to expand. Tick any that should actually be IN, then export and share via Slack
0 to include
Include?CompanyDomainReason

Unresolved — no LinkedIn page found

Apps we couldn't match to a LinkedIn page — click to expand. Tick any worth chasing, then export and share via Slack
0 to include
Include?CompanyDomainTier
06

The people behind them

Track 2: a decision-maker index for later outreach, and a live email-enrichment test.

Beyond the ad audience, we built an index of the senior decision-makers at these companies — the people an outreach motion would target. Pulled free from Sales Navigator (names, titles, photos), then a small, credit-conscious test of paid email enrichment to prove it works before the marketing team commits.

Email enrichment test — the business case

FullEnrich resolves a name + company into a verified work email. We enriched the highest-value decision-makers across free trial accounts. Emails render in full for signed-in Peach staff. Status: DELIVERABLE and HIGH PROBABILITY are confident; CATCH ALL means the domain accepts any address (less certain).

Decision-makerRoleCompanyVerified emailConfidence
The case for paying for FullEnrich: the decision-maker index (names, titles, photos) comes free from Sales Navigator. Enrichment only spends credits on the leads that matter — so far verified senior-exec emails for roughly 128 credits (FullEnrich only charges per hit; misses are free), hitting best when a real LinkedIn URL anchors the lookup. Team invites unlocked ~180 more credits, so we scale it to only the incredibly high-value targets, not the whole list.
07

Dev agencies

The build-partner audience: agencies that build apps for other people's companies.

SA software and app-development agencies — the Polymorphs of the world, who built Refreshi for a client rather than for themselves — ship apps for many companies at once. One relationship with an agency like this can put mSDK in front of a whole portfolio of future apps, not just one. Found via directories and search, deduped, existing Peach customers excluded, then LinkedIn-enriched and run through the same persona pull (photo, title, email, LinkedIn) as the people index above.

Agencies with a named contact are listed first. Same drawer, same kind of button as the acquisition list above — click through for photo, title, group (commercial or technical), LinkedIn profile and a masked work email where we found one.
AgencyCityLinkedInDecision-makersEvidence
08

Tools & risk tiers

We stay on the low rungs. LinkedIn is only ever touched at the sanctioned upload step.
L0 · Use

App-store, web & AI

Google Play + Apple + homepage checks, plus Google AI-overview (DataForSEO) for brand→parent. No LinkedIn touched.

L1 · Fallback

Public-page enrich

Apify anchor, spider.cloud — public LinkedIn pages, no login. Rarely needed now.

L2 · Fallback

Scraped-index API

RapidAPI Fresh LinkedIn — vendor absorbs the scraping; name → company URL.

L3 · Careful

Own session — core engine

Sales Navigator in ego-lite, read-only, human-paced. Now the people index, company search and public /in resolution. Strict back-off on any 429.

L4 · Reject

Cloud cookie actors

Handing our session to datacenter scrapers. LinkedIn's classic ban trigger. Never.

ToolJobCost modelStatusRunning cost/mo
Sales Navigator (ego-lite)People index, company search & public /in resolution — the core engineSubscriptionActive~$99
FullEnrichDecision-maker work emails (pay per verified hit)Plan / PAYGActive$55 (Pro, 1k credits)
DataForSEO — Google AI ModeLong-tail brand→parent + people from Google AI overviewPrepaid PAYGActive~$5 ($0.004/call)
google-play-scraperSA Play charts + developer site + installsFreeActive$0
Apple RSS + iTunesSA App Store charts + seller siteFreeActive$0
PIP SupabaseActive-trading Peach-customer exclusion (internal)InternalActive$0
RapidAPI Fresh LinkedInDomain → LinkedIn company (fallback)SubscriptionFallback$10
spider.cloudBulk company-page fetch (fallback)Prepaid PAYGFallback~$5
Apify anchor actorCompany name → LinkedIn page (fallback)Free tierFallback$0
SerpAPIWas /in resolution — replaced by Sales Nav flagshipProfileUrl (free)SubscriptionDropped$0
42matters / SimilarwebApp-SDK intelligenceEnterpriseDropped — sales-gated$0
Total (tools we keep)Core stack ~$159; +$15 optional fallbacks~$174
Reading the running costs: the workflow only truly needs three paid tools — Sales Navigator (~$99), FullEnrich ($55) and a little DataForSEO (~$5), so ~$159/mo runs it. The fallbacks (RapidAPI, spider.cloud) add ~$15 but are rarely hit now that Sales Nav resolves public /in URLs for free. SerpAPI ($75/mo elsewhere) was dropped once we found Sales Nav's own profile API returns the public /in link.
09

How to re-run it

Scripts live in Ad Campaign/list-builder/. Repeatable and cheap.
1

Discover

node discover-playstore.mjs + discover-playstore-delta.mjs + discover-apple.mjs → raw JSON per store.

2

Merge & tier

node merge-and-tier.mjs → dedupes to companies, tiers, flags non-merchants and global giants → companies.csv.

3

Recover .com SA merchants

node recover-sa-dotcom.mjs then refine-recovered.mjs → homepage + contact-signal checks → sa-recovered.json (the review set on this page).

4

Enrich + finalize

enrich-linkedin.mjs (RapidAPI domain lookup) then finalize-enrich.mjs (SerpAPI fallback + flag non-merchants) → matched-audience-upload.csv.

10

Status & next

Living document — this section moves as we expand.

Discovery → enrich → verify → exclude

182 assembled → LinkedIn URLs resolved, bad SerpAPI matches removed, and only actively-trading Peach merchants excluded (Lightdash volume, last 30 days; 14 dormant past-merchants flowed back in). 130 clean acquisition targets in matched-audience-upload.csv (19 added from the reviewed wrong-match list, LinkedIn pages re-resolved).

Dev-agency audience added (27 Jul)

A second target audience built and enriched: 105 South African software / app-development agencies (like Polymorph, who built Refreshi), 101 with a LinkedIn company page, plus 131 decision-makers (founders, CTOs, heads of engineering) enriched with photo, title, LinkedIn and email. See the "Dev agencies" section above. One agency builds apps for many clients, so it is a high-leverage segment for the mSDK. It's now live: the company Matched Audience finished matching to ~1,500+ members, and two dedicated ad sets — a single-image and a carousel, both on the "build once, ship everywhere" angle — are serving against it, with direct outreach to the 89 verified emails as the warmest next step.

Decide on the 26 customers

Run actively-trading Peach merchants as a separate mSDK upsell campaign, or leave them out. Tick any to add back and export in section 05.

Upload

Company Matched Audience in Campaign Manager; wait 24-48h, verify size clears 300, attach to C1/C2.

+

Later enhancements

Competitor-signal passes (website payment-gateway detection; DIY APK SDK grep) — documented, for a future session.

← The campaign plan
Sources & references