ad-to-landing-page-auditor

Analyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.

381 stars

Best use case

ad-to-landing-page-auditor is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Analyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.

Teams using ad-to-landing-page-auditor should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/ad-to-landing-page-auditor/SKILL.md --create-dirs "https://raw.githubusercontent.com/gooseworks-ai/goose-skills/main/skills/composites/ad-to-landing-page-auditor/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/ad-to-landing-page-auditor/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How ad-to-landing-page-auditor Compares

Feature / Agentad-to-landing-page-auditorStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Analyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Ad-to-Landing Page Auditor

The #1 reason ads get clicks but not conversions: the landing page doesn't deliver on the ad's promise. This skill audits the full click path — from ad copy to landing page experience — and flags every disconnect.

**Core principle:** A great ad with a mismatched landing page is worse than a mediocre ad with a matched one. Message match is the single biggest conversion lever most startups ignore.

## When to Use

- "Why are my ads getting clicks but no conversions?"
- "Audit my ad-to-landing page flow"
- "Check message match on our campaigns"
- "My conversion rate is low — help me figure out why"
- "Review our landing pages for our ad campaigns"

## Phase 0: Intake

1. **Ad data** — One of:
   - Ad copy + landing page URLs (manual list)
   - CSV export from ad platform
   - "Scrape my active ads" (uses ad scrapers on your domain)
2. **Platform(s)** — Google Search / Meta / LinkedIn / All
3. **Conversion goal** — What should happen after someone clicks? (Demo / Trial / Purchase / Download)
4. **Known conversion rates?** — Current click → conversion rate per ad/LP

## Phase 1: Ad Inventory

### If User Provides Ad Data

Parse the provided ads into:

| Ad ID | Platform | Headline | Body/Description | CTA | Landing Page URL | Conv Rate (if known) |
|-------|----------|----------|-----------------|-----|-----------------|---------------------|

### If Scraping Own Ads

Run `meta-ad-scraper` and/or `google-ad-scraper` on the user's domain to capture active ads.

## Phase 2: Landing Page Audit

For each unique landing page URL:

```
Fetch: [landing_page_url]
```

Extract and score:

### 2A: Content Elements

| Element | Found? | Content |
|---------|--------|---------|
| **Hero headline** | [Y/N] | "[Text]" |
| **Subheadline** | [Y/N] | "[Text]" |
| **Primary CTA** | [Y/N] | "[Button text]" |
| **CTA above fold** | [Y/N] | — |
| **Social proof** | [Y/N] | [Logos / testimonials / metrics] |
| **Benefit list** | [Y/N] | [Key benefits listed] |
| **Form / Sign-up** | [Y/N] | [Field count: N] |
| **Video** | [Y/N] | — |
| **Trust signals** | [Y/N] | [Security badges, guarantees] |

### 2B: Message Match Scoring

For each ad → landing page pair, score on:

| Dimension | Score (1-10) | Criteria |
|-----------|-------------|----------|
| **Promise continuity** | [X] | Does the LP headline deliver on the ad's promise? |
| **Language match** | [X] | Does the LP use the same words/phrases as the ad? |
| **Visual continuity** | [X] | Does the LP feel like a continuation of the ad? (Not assessable for search) |
| **CTA alignment** | [X] | Does the LP's ask match what the ad implied? |
| **Specificity match** | [X] | If the ad was specific ("for sales teams"), is the LP specific too? |
| **Emotional match** | [X] | If the ad used fear/urgency, does the LP carry that forward? |

**Message Match Score: [Average/60]**

### Scoring Guide

| Score | Rating | Meaning |
|-------|--------|---------|
| 50-60 | Excellent | Strong match — LP delivers on every ad promise |
| 40-49 | Good | Minor disconnects but overall coherent |
| 30-39 | Needs work | Noticeable gaps — visitor has to hunt for relevance |
| 20-29 | Poor | Ad and LP feel like different products |
| Below 20 | Critical | Complete mismatch — fix immediately |

## Phase 3: Conversion Friction Analysis

Beyond message match, assess landing page conversion friction:

| Friction Type | Check | Status |
|--------------|-------|--------|
| **Load time** | Does the page feel heavy/slow? (Asset count proxy) | [Fast/Slow/Unknown] |
| **Form length** | How many fields before conversion? | [N fields] — [Appropriate/Too many] |
| **CTA clarity** | Is there one clear CTA or competing actions? | [Clear/Cluttered] |
| **Above-fold conversion** | Can someone convert without scrolling? | [Yes/No] |
| **Social proof placement** | Is proof near the CTA? | [Yes/No] |
| **Navigation distraction** | Does the LP have full site nav? (Should be minimal) | [Minimal/Full nav] |
| **Mobile experience** | Any mobile-unfriendly elements? | [Good/Issues] |

## Phase 4: Output Format

```markdown
# Ad-to-Landing Page Audit — [Product/Client] — [DATE]

Ads audited: [N]
Unique landing pages: [N]
Platform(s): [Google / Meta / LinkedIn]
Overall message match: [Score/60] — [Rating]

---

## Executive Summary

[3-4 sentences: Overall finding, biggest disconnect, top recommendation, estimated conversion impact]

---

## Audit Results by Ad → Landing Page Pair

### Ad 1: "[Ad headline excerpt]"
**Platform:** [Google Search / Meta / LinkedIn]
**Ad copy:**
> Headline: "[text]"
> Body: "[text]"
> CTA: "[text]"

**Landing page:** [URL]
> LP headline: "[text]"
> LP subhead: "[text]"
> LP CTA: "[button text]"

**Message Match Score: [X/60] — [Rating]**

| Dimension | Score | Issue |
|-----------|-------|-------|
| Promise continuity | [X/10] | [Specific finding] |
| Language match | [X/10] | [Specific finding] |
| CTA alignment | [X/10] | [Specific finding] |
| Specificity match | [X/10] | [Specific finding] |
| Emotional match | [X/10] | [Specific finding] |

**Disconnect found:** [Specific description of mismatch]
**Recommended fix:** [Specific change to ad or LP]

### Ad 2: ...

---

## Landing Page Friction Report

### [Landing Page URL]
| Friction Point | Status | Impact | Fix |
|---------------|--------|--------|-----|
| [Friction] | [Red/Yellow/Green] | [High/Med/Low] | [Specific fix] |

---

## Priority Fixes

### Critical (Fix This Week)
1. **[Ad/LP pair]:** [Specific mismatch] → [Specific fix]
   - Est. conversion impact: [X% improvement]

### Important (Fix This Month)
2. **[Issue]:** [Fix]

### Nice-to-Have
3. **[Issue]:** [Fix]

---

## Rewrite Suggestions

### For [Ad or LP with worst match]:

**Current ad headline:** "[current]"
**Suggested ad headline:** "[rewrite that matches LP]"

OR

**Current LP headline:** "[current]"
**Suggested LP headline:** "[rewrite that matches ad]"
```

Save to `clients/<client-name>/ads/ad-lp-audit-[YYYY-MM-DD].md`.

## Cost

| Component | Cost |
|-----------|------|
| Landing page fetching | Free |
| Ad scraping (if scraping own ads) | ~$0.40-1.00 (Apify) |
| Analysis | Free (LLM reasoning) |
| **Total** | **Free-$1.00** |

## Tools Required

- **fetch_webpage** — for landing page analysis
- **Optional:** `meta-ad-scraper`, `google-ad-scraper` (if scraping own ads)
- **Apify API token** — only if scraping ads

## Trigger Phrases

- "Audit my ad-to-landing page match"
- "Why is my conversion rate so low?"
- "Check message match on our campaigns"
- "Do our landing pages match our ads?"
- "Run a CRO audit on our ad funnels"

Related Skills

landing-page-intel

381
from gooseworks-ai/goose-skills

Extract competitor and customer intelligence from any company's landing page HTML. Discovers tech stack, analytics tools, ad pixels, customer logos, SEO metadata, CTAs, hidden elements, and more. No API keys required.

signal-detection-pipeline

381
from gooseworks-ai/goose-skills

Detect buying signals from multiple sources, qualify leads, and generate outreach context

seo-content-engine

381
from gooseworks-ai/goose-skills

Build and run an SEO content engine: audit current state, identify gaps, build keyword architecture, generate content calendar, draft content.

outbound-prospecting-engine

381
from gooseworks-ai/goose-skills

End-to-end outbound prospecting: detect intent signals, research companies, find decision-maker contacts, personalize messaging, launch campaign.

event-prospecting-pipeline

381
from gooseworks-ai/goose-skills

Find attendees at conferences/events, research their companies, qualify against ICP, and launch outreach

competitor-monitoring-system

381
from gooseworks-ai/goose-skills

Set up and run ongoing competitive intelligence monitoring for a client. Tracks competitor content, ads, reviews, social, and product moves.

client-packet-engine

381
from gooseworks-ai/goose-skills

Batch client packet generator. Takes company names/URLs, runs intelligence + strategy generation, presents strategies for human selection, executes selected strategies in pitch-packet mode (no live campaigns or paid enrichment), and packages into local delivery packets.

client-package-notion

381
from gooseworks-ai/goose-skills

Package all work done for a client into a shareable Notion page with subpages and Google Sheets. Reads the client's folder (strategies, campaigns, content, leads, notes) and builds a structured Notion workspace the client can browse. Lead list CSVs are uploaded to Google Sheets and linked from the Notion pages. Use when you want to deliver work to a client in a polished, navigable format.

client-package-local

381
from gooseworks-ai/goose-skills

Package all work done for a client into a local filesystem delivery package with .md files and Google Sheets. Reads the client's folder (strategies, campaigns, content, leads, notes) and builds a structured directory with dated deliverables. Lead lists are uploaded to Google Sheets and linked from the markdown files. Use when you want to deliver work to a client in a polished, navigable format without requiring Notion.

client-onboarding

381
from gooseworks-ai/goose-skills

Full client onboarding: intelligence gathering, synthesis into Client Intelligence Package, and growth strategy generation. Phases 1-3 of the Client Launch Playbook.

lead-discovery

381
from gooseworks-ai/goose-skills

Orchestrator that runs first for lead generation requests. Gathers business context via website analysis or questions, identifies competitors, builds ICP, and routes to signal skills with pre-filled inputs.

github-repo-signals

381
from gooseworks-ai/goose-skills

Extract and score leads from GitHub repositories by analyzing stars, forks, issues, PRs, comments, and contributions. Produces unified multi-repo CSV with deduplicated user profiles. No paid API credits required.