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.
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.
Google Play + Apple charts across SA consumer categories, plus a by-name hunt for betting operators.
Group apps into companies; tier by install / rating scale (T1 big or cross-platform, T3 long tail).
Keep the South African companies: .za domains, then a homepage-signal pass to recover SA merchants on .com.
Drop banks, telcos, government and payment providers — not merchant prospects.
Human tick over the ambiguous .com recoveries (this page, section 05).
Resolve each company to its LinkedIn page URL (RapidAPI / Apify / spider.cloud).
Remove existing Peach customers via HubSpot before upload.
Company Matched Audience in Campaign Manager; wait 24-48h to match, verify size clears 300.
| Company | Website | Tier | Verticals |
|---|
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.
| Company | Website | Peach merchant name | Tier |
|---|
| Company | Domain | Reason |
|---|
| Company | Domain | Bad match | Tier |
|---|
| Company | Domain | Tier |
|---|
Google Play + Apple + homepage checks. No LinkedIn. Our discovery engine.
Apify anchor, spider.cloud — public LinkedIn pages, no login, no account risk.
RapidAPI Fresh LinkedIn — vendor absorbs the scraping; name → company URL.
Sales Navigator in ego-lite, read-only, human-paced. For Tier 1 validation only.
Handing our session to datacenter scrapers. LinkedIn's classic ban trigger. Never.
| Tool | Job | Cost | Status |
|---|---|---|---|
| google-play-scraper | SA Play charts + developer site + installs | Free | Tested |
| Apple RSS + iTunes | SA App Store charts + seller site | Free | Tested |
| Apify anchor actor | Company name → LinkedIn page + website | Free tier | Tested |
| RapidAPI Fresh LinkedIn | Domain → LinkedIn company record | $10/mo | Tested |
| spider.cloud | Bulk LinkedIn company-page fetch | ~$5 balance | Tested |
| Sales Navigator | Tier 1 account validation (ego-lite) | Trial | Active |
| 42matters / Similarweb | App-SDK intelligence | Enterprise | Dropped — sales-gated |
node discover-playstore.mjs + discover-playstore-delta.mjs + discover-apple.mjs → raw JSON per store.
node merge-and-tier.mjs → dedupes to companies, tiers, flags non-merchants and global giants → companies.csv.
node recover-sa-dotcom.mjs then refine-recovered.mjs → homepage + contact-signal checks → sa-recovered.json (the review set on this page).
enrich-linkedin.mjs (RapidAPI domain lookup) then finalize-enrich.mjs (SerpAPI fallback + flag non-merchants) → matched-audience-upload.csv.
182 assembled, enriched to LinkedIn URLs, bad SerpAPI matches removed, and cross-checked against the real 23,630-merchant Peach customer list (Lightdash). 103 clean acquisition targets in matched-audience-upload.csv.
Run existing Peach merchants as a separate mSDK upsell campaign, or leave them out. Your call (section 05).
Company Matched Audience in Campaign Manager; wait 24-48h, verify size clears 300, attach to C1/C2.
Competitor-signal passes (website payment-gateway detection; DIY APK SDK grep) — documented, for a future session.