# Google Ads Competitor Tracker: Ads, Formats & Countries (`precious_bathmat/google-ads-competitor-tracker`) Actor

See how many Google ads your competitors run, in which countries and formats, which ads they keep running, what they launched this month and who else advertises with their name. From Google's Ads Transparency Center; no login.

- **URL**: https://apify.com/precious\_bathmat/google-ads-competitor-tracker.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Marketing, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 competitor reports

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Ads Competitor Tracker: Ads, Formats & Countries

**How much is your competitor advertising on Google, where, and which ads do they keep running?** Enter competitor websites and get one report each: how many ads they run in a country, the split between text, image and video, how their ad count compares across countries, the ads they launched recently, the ads they have kept running longest, and who else is advertising with their name.

Data comes from Google's public **Ads Transparency Center**. No login, no API key.

### What does this do?

Other Google Ads scrapers hand you a pile of ad rows. This Actor answers the questions a marketer actually asks about a competitor, and gives you the ad rows too.

```mermaid
flowchart LR
    A[Competitor websites] --> B[Google Ads<br/>Transparency Center]
    B --> C[Their own ads,<br/>separated from resellers<br/>and hosted customers]
    C --> D[One report each:<br/>ad count, formats,<br/>countries, new and<br/>long-running ads]
    C --> E[Every ad as a row]
```

### Who is it for?

| You are | You use it to |
|---|---|
| **PPC and paid search managers** | Size up a competitor's Google Ads effort before a pitch or a budget meeting |
| **Marketing agencies** | Show a prospect how their competitors advertise, country by country and format by format |
| **Founders and product marketers** | See which ads rivals have kept running for years, the best sign of what works for them |
| **Brand protection teams** | Find resellers, affiliates and others running ads that point to your domain |
| **Market researchers** | Compare advertising intensity across a whole category, such as CRMs or VPNs |

### What data do you get?

One row per competitor:

| Field | Meaning |
|---|---|
| `ads` | The company's **own** ads that link to its domain, in the country you chose (Google's range, such as "2,000–3,000") |
| `countsBasedOn` | What that count measures (see "Three different counts" below) |
| `textAds`, `imageAds`, `videoAds`, `videoSharePercent`... | The format split, from Google's own counts |
| `adsByCountry`, `topCountry` | The ad count in each country you compare, and which of them has the most |
| `adsLinkingToDomain` | Every ad that links to the domain, whoever ran it |
| `companyAdsAllBrands` | Everything the company's advertiser accounts run, other brands included |
| `mainAdvertiser`, `mainAdvertiserCountry`, `companyAdvertisers` | The company's advertiser account(s) and where they are registered |
| `otherAdvertisers`, `otherAdvertiserCount` | Resellers, agencies, affiliates and hosted customers whose ads link to the domain |
| `newAdsLast7Days`, `newAdsLast30Days` | Recently launched ads among the ads read |
| `longestRunningAds` | The ads still running that have been shown the most days, with preview image and link |
| `newestAds`, `runningNowPercent`, `medianDaysShown` | What they launched last, and how long their ads usually run |
| `transparencyUrl` | The same view on Google's site |

Plus, with **Also return every ad as a row** on (the default), a second table with each ad's advertiser, whether it is the company's own, format, first and last shown dates, days shown, preview image and a link to the ad on Google.

### Three different counts, and why they matter

Searching Google's ad library by domain returns every ad that **links to** that domain, which is often not the same as the company's own advertising:

- **Hosted customers.** 1,000–2,000 US ads link to zendesk.com, but Zendesk itself runs 400–500 of them. The biggest advertiser on zendesk.com in our sample was **Depop**, most likely because its help centre is hosted there. Squarespace is similar: 3,000–4,000 ads link to squarespace.com and 1,000–2,000 are Squarespace's own; most of the rest come from small businesses, likely ones with Squarespace websites.
- **Resellers and affiliates.** Among 200 hubspot.com ads read, 35 other advertisers had ads pointing to hubspot.com.
- **Other brands and sites.** Salesforce, Inc.'s accounts run 7,000–8,000 US ads in total, but only 2,000–3,000 of them link to salesforce.com; the rest link elsewhere.

So the Actor finds the company's own advertiser accounts among the ads it reads and counts **their ads that link to the domain**. You also get the other two numbers (`adsLinkingToDomain`, `companyAdsAllBrands`).

When a company advertises under a legal name that does not look like its domain (ClickUp is "Mango Technologies", 1Password is "AgileBits", HelloFresh US is "Grocery Delivery E-Services USA"), it cannot be picked out by name. The report then counts every ad linking to the domain, says so in `countsBasedOn`, and names that advertiser as `mainAdvertiser`. To count one account exactly, enter its advertiser ID (starting "AR"), which is in the `mainAdvertiserId` field and on Google's site.

### Example: CRMs and website builders, US, September 2026

Run from Apify's servers on 19 September 2026:

| Competitor | Own ads on its domain | All ads linking to it | Own ads, all brands | Video share | Other advertisers | Median days shown |
|---|---|---|---|---|---|---|
| monday.com | 6,000–7,000 | 7,000–8,000 | 6,000–7,000 | 40% | 6 | 128 |
| salesforce.com | 2,000–3,000 | 3,000–4,000 | 7,000–8,000 | 1.2% | 6 | 155 |
| pipedrive.com | 700–800 | 1,000–2,000 | 700–800 | 1.7% | 5 | 317 |
| hubspot.com | 600–700 | 1,000–2,000 | 700–800 | 37% | 35 | 378 |
| zendesk.com | 400–500 | 1,000–2,000 | 500–600 | 6.3% | 11 | 430 |
| godaddy.com | 10,000–20,000 | 10,000–20,000 | 20,000–30,000 | 9.1% | 1 | 131 |
| wix.com | 8,000–9,000 | 8,000–9,000 | 10,000–20,000 | 57.1% | 1 | 280 |
| shopify.com | 7,000–8,000 | 9,000–10,000 | 9,000–10,000 | 30.3% | 14 | 612 |
| squarespace.com | 1,000–2,000 | 3,000–4,000 | 1,000–2,000 | 7% | 51 | 131 |
| webflow.com | 400–500 | 400–500 | 400–500 | 24.6% | 6 | 112 |

What it tells you:

- **monday.com runs the most ads in its group,** about ten times as many as HubSpot, and 40% of them are video.
- **Wix leans on video** (57% of its ads); Salesforce and Pipedrive barely use it.
- **Some ads run for years.** HubSpot, Zendesk and monday.com each still run ads first shown in October 2021 that have been shown on more than 1,700 days. Those are the ads worth studying.
- **Where they advertise differs.** Pipedrive and Shopify run more ads in Germany than in the US among the eight countries compared.

### How to use it

1. Add your **competitors**, one website per line (`hubspot.com`). A company name or an advertiser ID also works.
2. Choose the **country** to analyse, or Worldwide.
3. Pick the countries to **compare ad counts** across (free).
4. Run it, then open the **Competitor reports** tab, or export to CSV, Excel or JSON.

Schedule it weekly with the same competitors to see when they launch new campaigns.

### Popular comparisons

Ready-to-run competitor sets, one page per category (US):

- [CRM Software Google Ads: HubSpot vs Salesforce vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/crm-software-google-ads) — hubspot.com, salesforce.com, zendesk.com, pipedrive.com, monday.com
- [Website Builder Google Ads: Wix vs Squarespace vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/website-builder-google-ads) — wix.com, squarespace.com, shopify.com, webflow.com, godaddy.com
- [VPN Google Ads: NordVPN vs ExpressVPN vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/vpn-google-ads) — nordvpn.com, expressvpn.com, surfshark.com, proton.me, privateinternetaccess.com
- [Meal Kit Google Ads: HelloFresh vs Factor vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/meal-kit-google-ads) — hellofresh.com, factor75.com, blueapron.com, homechef.com, everyplate.com
- [Project Management Google Ads: Asana vs ClickUp vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/project-management-google-ads) — asana.com, clickup.com, monday.com, notion.com, atlassian.com
- [Email Marketing Google Ads: Mailchimp vs Klaviyo vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/email-marketing-google-ads) — mailchimp.com, klaviyo.com, constantcontact.com, brevo.com, activecampaign.com
- [Online Travel Google Ads: Booking.com vs Expedia vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/online-travel-google-ads) — booking.com, expedia.com, airbnb.com, tripadvisor.com, hotels.com
- [Sportswear Google Ads: Nike vs Adidas vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/sportswear-google-ads) — nike.com, adidas.com, gymshark.com, lululemon.com, underarmour.com
- [SEO Tool Google Ads: Semrush vs Ahrefs vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/seo-tools-google-ads) — semrush.com, ahrefs.com, moz.com, similarweb.com, seranking.com
- [AI Writing Tool Google Ads: Grammarly vs QuillBot vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/ai-writing-tools-google-ads) — grammarly.com, quillbot.com, prowritingaid.com, jasper.ai, writesonic.com
- [Fintech Google Ads: Chime vs SoFi vs Wise vs Revolut](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/fintech-google-ads) — chime.com, sofi.com, wise.com, revolut.com
- [Accounting Software Google Ads: Intuit vs Xero vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/accounting-software-google-ads) — intuit.com, xero.com, freshbooks.com, waveapps.com, sage.com
- [Password Manager Google Ads: 1Password vs LastPass vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/password-manager-google-ads) — 1password.com, lastpass.com, bitwarden.com, dashlane.com, keepersecurity.com
- [Online Learning Google Ads: Coursera vs Udemy vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/online-learning-google-ads) — coursera.org, udemy.com, skillshare.com, masterclass.com, edx.org
- [Car Insurance Google Ads: GEICO vs Progressive vs More](https://apify.com/precious_bathmat/google-ads-competitor-tracker/examples/car-insurance-google-ads) — geico.com, progressive.com, statefarm.com, allstate.com, libertymutual.com

Each page is this Actor with a different set of competitors. Open one, put your own competitors in, and run it.

### Pricing

Pay per result: **$0.03 per competitor report** plus **$0.0015 per ad row** ($1.50 per 1,000). A competitor with the default 200 ads costs **$0.33**. Turn off **Also return every ad as a row** to pay only for the reports: 10 competitors for $0.30.

Country comparisons and format counts cost nothing extra. A competitor with no ads at all is reported free.

### Where the data comes from

Google's **Ads Transparency Center** (adstransparency.google.com), the public library of ads shown through Google Ads on Search, YouTube, Display, Shopping, Maps and Play. The Actor makes the same requests the site makes for a visitor who is not logged in.

Google sometimes rate-limits a busy server. When that happens the Actor carries on through Apify Proxy automatically, so the run still finishes. If Google refuses every route, the run stops, stores nothing more, charges nothing for the skipped competitors, and tells you to run again later.

### FAQ

**Why are ad counts ranges?**
Google publishes them that way ("1,000–2,000"). The Actor passes them on rather than inventing precision.

**Do I get the ad text?**
Not as text. Google serves most text ads as rendered preview images, so each ad row has a preview image link and a link to the ad on Google's site, where you can read it.

**Do I get ad spend or impressions?**
No. Google publishes spend only for political ads, so it is not available for commercial advertisers.

**How are "new ads" counted?**
Among the ads read. Google lists ads by when they were last shown, not when they started, so `newAdsLast30Days` counts recent launches in that sample. Read more ads per competitor for a fuller picture; the ad counts by country and format are Google's totals and do not depend on it.

**The main advertiser is not the company I entered. Why?**
Either another advertiser runs most of the ads linking to that domain (a reseller or a customer it hosts), or the company advertises under a different legal name. `mainAdvertiserMatchesDomain` and `countsBasedOn` tell you which.

**Can I track a company by its advertiser account instead?**
Yes. Enter the advertiser ID (it starts "AR" and is in the `mainAdvertiserId` field or on Google's site) and every count covers exactly that account.

# Actor input Schema

## `competitors` (type: `array`):

Each competitor's website domain, one per line (hubspot.com). A company name or a Google advertiser ID (AR...) also works; domains are the most reliable.

## `country` (type: `string`):

Where to look at their ads. The ad count, format split and ad list are for this country.

## `maxAdsPerCompetitor` (type: `integer`):

How many of each competitor's most recent ads to read for the ad list, advertisers and activity. Totals by country and format are counted by Google and do not depend on this. 0 gives counts only.

## `compareCountries` (type: `array`):

Adds how many ads each competitor runs in each of these countries. Free.

## `includeAds` (type: `boolean`):

A second table with every ad read: advertiser, format, first and last shown, days shown, preview image and a link to the ad on Google. Charged per ad; turn it off to pay for the reports only.

## Actor input object example

```json
{
  "competitors": [
    "nike.com",
    "adidas.com",
    "gymshark.com"
  ],
  "country": "US",
  "maxAdsPerCompetitor": 200,
  "compareCountries": [
    "US",
    "GB",
    "CA",
    "AU",
    "DE",
    "FR",
    "IN",
    "BR"
  ],
  "includeAds": true
}
```

# Actor output Schema

## `reports` (type: `string`):

Ad counts by country and format, advertisers, new and long-running ads for each competitor.

## `ads` (type: `string`):

Every ad read, when that option is on.

## `summary` (type: `string`):

What was found per competitor and anything skipped.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "competitors": [
        "hubspot.com",
        "salesforce.com",
        "zendesk.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/google-ads-competitor-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "competitors": [
        "hubspot.com",
        "salesforce.com",
        "zendesk.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/google-ads-competitor-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "competitors": [
    "hubspot.com",
    "salesforce.com",
    "zendesk.com"
  ]
}' |
apify call precious_bathmat/google-ads-competitor-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/google-ads-competitor-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hNQZwAdnqLi6hQSiV/builds/plB5UclJ5oxEwvtA1/openapi.json
