# AdRoast: B2B Ad and Landing Page Roaster (`adroast/adroast-apify`) Actor

Score a company's live LinkedIn and Google ads against its buyer, worst first with the fix for each, or roast one ad and its landing page. Built for B2B SaaS marketers and agencies.

- **URL**: https://apify.com/adroast/adroast-apify.md
- **Developed by:** [Marina Kogan](https://apify.com/adroast) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / company ads scored

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

## AdRoast: B2B Ad and Landing Page Roaster

Find out why a B2B ad gets clicks and no pipeline. AdRoast scores an ad and the landing page behind it against the buyer it should reach, and tells you exactly where the message breaks between the two (we call it Message Drift).

### What it does

**Mode 1, a company's live ads.** Give a website (e.g. `semgrep.dev`). AdRoast pulls the company's live LinkedIn and Google ads, infers who the company sells to, scores every ad against that buyer, and ranks them worst first with the fix for each.

**Mode 2, one ad.** Give the landing page URL plus the ad copy and/or the ad image URL, and the buyer (or the website, to infer it). You get an overall score, the ICP mismatch, ranked issues, a landing page score, a recommendation and a link to the full report on adroast.in.

### Use it for

- Auditing your own LinkedIn and Google ads before spending more on them
- Competitor ad research with a verdict, not just a screenshot
- Agencies: a fast first-call teardown of a prospect's live ads
- Enriching lead lists with "this company runs ads, and here is what is wrong with them"

### Input

| Field | Mode | Notes |
|---|---|---|
| `mode` | both | `live_ads` or `roast_ad` |
| `website` | live ads (required), one ad (optional) | Company site |
| `landingUrl` | one ad (required) | The page the ad sends people to. Not the homepage. |
| `adCopy`, `adImageUrl` | one ad | At least one is recommended |
| `icp` | one ad | Who the ad should reach. Leave empty to infer it from `website` |
| `platform` | one ad | `linkedin`, `google` or `meta` |

### Output

One dataset row per ad: platform, headline, score, verdict, fix, creative and ad URL. In one-ad mode, one row with the full roast and a report link.

### Pricing

Pay per event, charged only when a result comes back:

- **$1.50** per company: all of its live ads pulled and scored
- **$2.00** per ad roasted with its landing page
  Bad input, no live ads found or a missing landing page cost nothing.

### Notes

- Live ads come from the LinkedIn Ad Library and Google Ads Transparency Center, public sources only.
- If the landing page can't be read, or the buyer can't be inferred, the run stops and says what to add instead of guessing.
- Want the full report, the Fix Kit and unlimited roasts? Use [adroast.in](https://www.adroast.in). AdRoast also works inside Claude: [adroast.in/mcp](https://www.adroast.in/mcp).

Built by Marina Kogan. Support: marina.kogan@adroast.in

# Actor input Schema

## `mode` (type: `string`):

Roast one ad you provide, or pull a company's live ads and score them all.

## `website` (type: `string`):

For live ads: the advertiser's site, e.g. semgrep.dev. For one ad: optional, used to infer the buyer when you don't give an ICP.

## `landingUrl` (type: `string`):

One ad only: the page the ad sends people to. Required for that mode. Use the real ad destination, not the homepage.

## `adCopy` (type: `string`):

One ad only: the ad text, if you have it.

## `adImageUrl` (type: `string`):

One ad only: public URL of the ad creative image.

## `icp` (type: `string`):

One ad only: who the ad should reach, e.g. 'Heads of AppSec at Series B+ SaaS'. Leave empty to infer it from the website.

## `platform` (type: `string`):

One ad only.

## `company` (type: `string`):

One ad only, optional.

## Actor input object example

```json
{
  "mode": "live_ads",
  "website": "semgrep.dev",
  "platform": "linkedin"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "website": "semgrep.dev"
};

// Run the Actor and wait for it to finish
const run = await client.actor("adroast/adroast-apify").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 = { "website": "semgrep.dev" }

# Run the Actor and wait for it to finish
run = client.actor("adroast/adroast-apify").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 '{
  "website": "semgrep.dev"
}' |
apify call adroast/adroast-apify --silent --output-dataset

```

## MCP server setup

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

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/666rFttphXbom0BQ7/builds/TRlMojEF59YVXtlzP/openapi.json
