Ads
Pull the ads a company is running from Meta, Google, LinkedIn, and TikTok into a table column, and check the price before you spend a credit.
Ads is competitor ad intelligence: the ads a company is currently running, read out of the public ad libraries, so you can tell whether an account buys paid acquisition and what messaging it is testing. It does not buy ads and does not push audiences to an ad platform — audience activation is roadmap, not shipped.
There is no /ads route. Ad data lands in a table column like any other enrichment: one column across a list of companies shows who is spending and on what.
Find the operation first
oxygen tools search "competitor ads" --json
oxygen tools get adyntel.linkedin_ads --jsontools get carries the input schema, output shape, availability, and current price. Every operation below is a paid provider call.
| What you want | Operation |
|---|---|
| Facebook + Instagram ads for a domain | adyntel.facebook_ads |
| Google search, image, and video ads for a domain | adyntel.google_ads |
| LinkedIn ads for a domain or page id | adyntel.linkedin_ads |
| Search an ad library by keyword | adyntel.facebook_ad_search, adyntel.linkedin_keyword_search, adyntel.tiktok_search |
| Paid vs organic keyword mix, estimated traffic, budget, CPC | adyntel.domain_keywords |
| One LinkedIn ad, or the LinkedIn Ad Library by advertiser | scraper.linkedin_ad, scraper.linkedin_ad_search |
Adyntel runs on Oxygen's managed key. To use your own, open Connections (/connections) → Adyntel → Configure, paste the Adyntel API key and Adyntel account email, then Save key. The scraper.* ad reads are managed only — nothing to connect.
As a table column
Tables (/tables) → your table → the Add column button at the right end of the header row → type ads into Search all tools (e.g. apollo, hunter, firmographics) → pick the operation and map the input column.
From the CLI:
oxygen columns add <table> --label "Meta ads" --kind tool --data-type jsonb \
--definition-json '{"toolId":"adyntel.facebook_ads","inputMapping":{"company_domain":{"type":"column","columnKey":"domain"}}}' --json
oxygen columns run <table> meta_ads --dry-run --json # cost, no credits
oxygen columns run <table> meta_ads --limit 1 --approved --max-credits <cap> --json
oxygen columns run <table> meta_ads --all --background --approved --max-credits <cap> --jsoncolumns add never spends. Read the first cell before batching: a domain with no ads returns an empty result you still paid for.
One-off lookup
oxygen tools run adyntel.linkedin_ads --input-json '{"company_domain":"acme.com"}' --mode dry-run --json
oxygen tools run adyntel.linkedin_ads --input-json '{"company_domain":"acme.com"}' \
--mode live --approved --max-credits <cap> --jsonA live run is refused without both --approved and --max-credits. Adyntel operations default to dry-run; the scraper.* ad reads default to live — pass --mode dry-run explicitly for a quote.
Over MCP the same path is oxygen_adyntel_ads_search (mode, approved, max_credits), which renders an ad widget. It is not in the default tool list — reconnect with ?toolset=enrichment.
Related
- Provider catalog — how operations, prices, and availability are exposed.
- LinkedIn data access —
scraper.linkedin_adand the rest of the cookieless LinkedIn reads. - Approvals — the paid-action gate.