One domain, every ad account: brands, sub-brands and agencies
A company advertises through many accounts per platform, some its own, some run by agencies and resellers. How to map them all from one domain, with a real samsung.com profile.
The AdLib team · · 6 min read
You want a competitor's ads, and you start with their domain. Then you open the Meta Ad Library and find five pages with the same name. Google lists the brand under three legal entities and an agency you have never heard of. TikTok has one account for the group and four country accounts that may or may not be theirs. Amazon names the account after a media agency.
That is normal. Large advertisers run many accounts per platform, by country and product line, and agencies and resellers run more. If you track one page, you see a fraction of what the company does. This post shows how to get the whole map from one domain, using samsung.com as captured on 28 Oct 2026.
What you can do with it
- Track the whole company, not one page. Put every confirmed account on a watchlist and the alerts cover all of them.
- See where they advertise. Accounts and active ads per platform, countries, formats and launches per week, combined.
- Spot the agencies. Accounts that run ads for the domain under another company's name are listed apart or flagged.
- Qualify a lead. A yes or no per platform, with active ad counts, for a CRM or a sheet.
- Go from parent to brands. For reviewed companies, the profile names the other brands of the group.
Step 1: the company profile
curl "https://api.adlibapi.com/v1/companies/samsung.com" \
-H "X-API-Key: $ADLIB_API_KEY"The profile resolves the domain the same way as /v1/advertisers/resolve, including our manual corrections, and sorts the result into three lists:
accounts: the company's own accounts, with rolebrandorunknown, at or abovemin_score(default 0.75).related: agencies, resellers and partners running ads for the domain, with roleagency,resellerorpartner.candidates: possible accounts belowmin_score.
Only accounts count toward platforms and stats. Pass include_related=true to add related to the totals.
For samsung.com, the profile listed 18 accounts on six platforms:
| Platform | Accounts | Ads known | Active ads |
|---|---|---|---|
| Meta | 5 | 1,700 | 790 |
| 5 | 832 | 791 | |
| TikTok | 1 | 285 | 228 |
| Snapchat | 2 | 370 | 9 |
| 4 | 0 | 0 | |
| X | 1 | 0 | 0 |
The five Meta pages are all called Samsung, and all scored 0.97 or 1.0 because their ads link to samsung.com. Page meta:133803174373 (India) had 588 active ads, meta:142116395934723 (Italy) 158 active out of 1,048 we know. On TikTok it is one account, SAMSUNG ELECTRONICS CO, LTD in South Korea, with 228 active ads. On Snapchat, Samsung Electronics Benelux has 370 ads in our archive and 8 active.
The combined stats covered 3,187 ads: 2,167 active, a median run of 21 days, a 90th percentile of 244 days, and a longest run of 1,422 days. The longest-running ads in the list were Google text ads of Samsung Electronics GmbH, the oldest running since December 2022 and still active.
Each account carries score, match_reason, role, role_source, active_ads and total_ads_known. The four Pinterest accounts (Samsung US, samsung_HK, Samsung, Samsung KSA) matched by name only, at 0.759 to 0.775. They passed the threshold, but nothing ties them to the domain, so check them by hand.
Step 2: own accounts, agencies and the grey zone
The role field says how an account relates to the domain: brand, agency, reseller (dealer, importer), partner or unknown. role_source says where it came from: manual means we set it, inferred means it was read from the account name.
Name inference only goes so far. Two of the five Google accounts in the samsung.com profile are VİVAKİ TURKEY MEDYA HİZMETLERİ A.Ş (google:AR17151729176751898625) and CHEIL PERU S.A.C. (google:AR13469544930959425537). Both scored 0.95 because their ads link to samsung.com. The API returns both with role unknown, so they sit in accounts and count toward the totals.
Reading them as agencies is our editorial note, not API output. VivaKi was Publicis Groupe's media unit, and Cheil Worldwide appears in Samsung's suggested brand family. If you agree, report the role and it can change for everyone:
curl -X POST "https://api.adlibapi.com/v1/advertisers/resolve/reports" \
-H "X-API-Key: $ADLIB_API_KEY" -H "Content-Type: application/json" \
-d '{"domain": "samsung.com", "advertiser_id": "google:AR17151729176751898625", "kind": "wrong_role", "role": "agency"}'Reports are free. Accepted ones change the resolve for every customer.
The third account with role unknown, 삼성전자(주), is the Korean name of Samsung Electronics, so unknown there means "not confirmed", not "suspicious". Where an account name does give it away, the role is set: in the profile of jbl.com, a Samsung brand, HAVAS MEDIA INDIA PRIVATE LIMITED comes back under related with role agency.
Amazon adds one more source. Its library names who paid for the ads, which the resolve keeps in extra.payers. Among the samsung.com candidates, the account Samsung_ES_Starcom was paid for by PUBLICIS ONE SPAIN, S.L.U., while Samsung Deutschland (127 ads known) was paid for by Samsung Electronics GmbH. Both scored 0.6 on the name alone, so they are candidates, not accounts.
Step 3: candidates and errors
The samsung.com candidates were Samsung Japan on Pinterest (0.735), the two Amazon accounts (0.6), and four TikTok country accounts for the UK, Greece, France and Iberia (0.55). None had domain proof. Some will be Samsung's own country accounts. To use them, review them and either lower min_score or report them as missing_match.
errors lists platforms that failed during the resolve. For samsung.com, LinkedIn answered upstream_blocked and Microsoft Bing timed out with upstream_error. An error means no data, not "no account". Run the profile again later for those platforms with platform=linkedin,microsoft.
Step 4: brands and sub-brands
When we have reviewed a company, family names the parent company, its domain and its other brands. Each brand has a domain, so the next call is the same endpoint again:
curl "https://api.adlibapi.com/v1/companies/jbl.com" \
-H "X-API-Key: $ADLIB_API_KEY"For samsung.com, family was null at capture. We have a suggested list (Harman, JBL, Harman Kardon, AKG, Cheil Worldwide and others), but the API returns family only after review, so the demo on our homepage marks that list as a suggestion. Until then, resolve sub-brand domains you already know yourself.
The quick version: a domain check
When you only need to know whether a company advertises right now, GET /v1/domains/{domain}/check answers in one row:
curl "https://api.adlibapi.com/v1/domains/samsung.com/check" \
-H "X-API-Key: $ADLIB_API_KEY"For samsung.com: advertising: true, platforms_advertising: "meta,google,tiktok,snapchat" and total_active_ads: 1543, plus per platform <platform>_advertising, <platform>_active_ads and <platform>_advertiser_id as flat columns for Clay or a sheet. It reports one account per platform. On Google that was the VivaKi Turkey account, which is a good reminder that a check is a yes or no, not an account map. The Clay and n8n guide uses it on a lead list.
What it costs
| Call | Credits |
|---|---|
GET /v1/companies/{domain} |
15 (one resolve plus one stats call), free if nothing matches |
GET /v1/advertisers/resolve |
10 when at least one advertiser is found, else 0 |
GET /v1/domains/{domain}/check |
3, free if no platform could be checked |
POST /v1/advertisers/resolve/reports |
free |
Every response has an X-Billing-Credits header. Prices per call are on credits and billing.
Honest limits
- Matching is evidence, not certainty. A domain match is strong, a name match is a guess. The scores are there so you can draw your own line. How each platform links a domain is in how to find advertiser IDs from a domain.
- Roles are often unknown. We infer roles from account names and set them by hand after review. An agency with a neutral name stays
unknownuntil someone reports it. - Families are reviewed, not generated.
familyis empty until we have checked it. - Platforms fail sometimes. Read
errorsbefore concluding a company has no account somewhere. - Counts depend on our archive.
total_ads_knowncounts ads we have seen. Accounts we have never crawled show 0 even when they advertise.
Do this now
Run the profile for the one domain you care most about with a free key (5,000 credits a month, no card). That is 15 credits:
curl "https://api.adlibapi.com/v1/companies/yourcompetitor.com" \
-H "X-API-Key: $ADLIB_API_KEY"Read accounts against what you know, look at every unknown role and every candidate, and report what is wrong. Then put the confirmed ids on a watchlist so new and removed ads reach you: Slack alerts for competitor ads shows the setup. To look inside any single ad you find, see everything you can know about one ad.
Questions people ask
- How do I find every ad account of a company?
- Call GET /v1/companies/{domain}. It resolves the domain on every platform and returns the company's own accounts under accounts, agencies, resellers and partners under related, and weaker matches under candidates, with combined stats.
- What is the difference between accounts, related and candidates?
- accounts are the company's own accounts (role brand or unknown) at or above min_score, default 0.75. related are accounts with role agency, reseller or partner that run ads for the domain. candidates scored below min_score and are left out of the totals.
- Does the API tell me which accounts belong to an agency?
- Where the role is known, yes: role is brand, agency, reseller, partner or unknown, and role_source says whether we set it (manual) or inferred it from the account name. An agency account whose name gives no hint comes back as unknown.
- Can I see a company's other brands?
- When we have reviewed the company, family names the parent company and its other brands with their domains. Resolve each brand's domain for its accounts. For unreviewed companies family is null.
- How much does a company profile cost?
- 15 credits, one resolve (10) plus one stats call (5), and nothing if no account matches. A plain resolve costs 10 credits and a yes or no domain check 3.