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.
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
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/ad-to-landing-page-auditor/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How ad-to-landing-page-auditor Compares
| Feature / Agent | ad-to-landing-page-auditor | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/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
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
Detect buying signals from multiple sources, qualify leads, and generate outreach context
seo-content-engine
Build and run an SEO content engine: audit current state, identify gaps, build keyword architecture, generate content calendar, draft content.
outbound-prospecting-engine
End-to-end outbound prospecting: detect intent signals, research companies, find decision-maker contacts, personalize messaging, launch campaign.
event-prospecting-pipeline
Find attendees at conferences/events, research their companies, qualify against ICP, and launch outreach
competitor-monitoring-system
Set up and run ongoing competitive intelligence monitoring for a client. Tracks competitor content, ads, reviews, social, and product moves.
client-packet-engine
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
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
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
Full client onboarding: intelligence gathering, synthesis into Client Intelligence Package, and growth strategy generation. Phases 1-3 of the Client Launch Playbook.
lead-discovery
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
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.