OXYGENOxygen/ Docs
Data

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 --json

tools get carries the input schema, output shape, availability, and current price. Every operation below is a paid provider call.

What you wantOperation
Facebook + Instagram ads for a domainadyntel.facebook_ads
Google search, image, and video ads for a domainadyntel.google_ads
LinkedIn ads for a domain or page idadyntel.linkedin_ads
Search an ad library by keywordadyntel.facebook_ad_search, adyntel.linkedin_keyword_search, adyntel.tiktok_search
Paid vs organic keyword mix, estimated traffic, budget, CPCadyntel.domain_keywords
One LinkedIn ad, or the LinkedIn Ad Library by advertiserscraper.linkedin_ad, scraper.linkedin_ad_search

Adyntel runs on Oxygen's managed key. To use your own, open Connections (/connections) → AdyntelConfigure, 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> --json

columns 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> --json

A 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.

On this page