adwarp

Start with 1 prompt

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.
adwarp
GitHub

Start with 1 prompt

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.

Claude skills for LinkedIn Ads and Google Ads, compared

A pick for each paid ads job across 3 free skill sets, with the install command, a sample prompt and report, and what each skill can change in your account.

By Updated 23 min read

A Claude skill is a folder with a SKILL.md file that teaches Claude 1 job, and you add marketing skills with 1 command, npx skills add <repo>, in Claude Code, Codex or Cursor. For paid ads, the free sets include Corey Haines' marketingskills (1 generalist ads skill), claude-ads (audits across 12 platforms that don't change the account) and paid-ads-skills (17 skills for LinkedIn Ads and Google Ads, which we maintain), and the table below says which to install for which job.

We also maintain Adwarp, the open-source Model Context Protocol (MCP) server and command-line tool (CLI) that our skills call when you want live data instead of an export. Every count below was checked on the repos on November 7, 2026, and each of our skills has its own page in the skills docs. We installed every third-party skill the skills CLI could fetch into an empty test project and read the source of the rest, and every sample output under our own skills comes from the made-up accounts in the repo's examples folder, so you can run the same prompt on the same files and compare.

Which skill for which paid ads job

Find your job in the first column. The reads or writes column says whether the skill can touch the account, which is worth knowing before you point it at a live one.

Job, Skill, Repo, Platforms, Reads or writes, Install, License
JobSkillRepoPlatformsReads or writesInstallLicense
Audit a LinkedIn Ads accountlinkedin-ads-auditpaid-ads-skills (ours)LinkedIn AdsReadsnpx skills add adwarp-dev/paid-ads-skills --skill linkedin-ads-auditMIT
Review LinkedIn performancelinkedin-ads-performance-reviewpaid-ads-skills (ours)LinkedIn AdsReadsnpx skills add adwarp-dev/paid-ads-skills --skill linkedin-ads-performance-reviewMIT
Pause losing LinkedIn adslinkedin-ads-pause-rulespaid-ads-skills (ours)LinkedIn AdsWrites: pauses single ads after your yesnpx skills add adwarp-dev/paid-ads-skills --skill linkedin-ads-pause-rulesMIT
Size a LinkedIn audiencelinkedin-audience-sizingpaid-ads-skills (ours)LinkedIn AdsReadsnpx skills add adwarp-dev/paid-ads-skills --skill linkedin-audience-sizingMIT
Launch a LinkedIn campaignlinkedin-campaign-launchpaid-ads-skills (ours)LinkedIn AdsWrites: drafts after your yesnpx skills add adwarp-dev/paid-ads-skills --skill linkedin-campaign-launchMIT
Build 1:1 account-based adslinkedin-abm-builderpaid-ads-skills (ours)LinkedIn AdsWrites: drafts after your yesnpx skills add adwarp-dev/paid-ads-skills --skill linkedin-abm-builderMIT
Audit a Google Ads accountgoogle-ads-account-auditpaid-ads-skills (ours)Google AdsReadsnpx skills add adwarp-dev/paid-ads-skills --skill google-ads-account-auditMIT
Find negative keywordsgoogle-ads-search-termspaid-ads-skills (ours)Google AdsReads, writes an Editor file to your disknpx skills add adwarp-dev/paid-ads-skills --skill google-ads-search-termsMIT
Build a Search campaigngoogle-ads-search-campaign-builderpaid-ads-skills (ours)Google AdsWrites: 1 paused campaign after your yesnpx skills add adwarp-dev/paid-ads-skills --skill google-ads-search-campaign-builderMIT
Weekly reportpaid-media-weekly-reportpaid-ads-skills (ours)BothReadsnpx skills add adwarp-dev/paid-ads-skills --skill paid-media-weekly-reportMIT
Daily alarmpaid-media-health-checkpaid-ads-skills (ours)BothReadsnpx skills add adwarp-dev/paid-ads-skills --skill paid-media-health-checkMIT
Monthly pacingad-budget-pacingpaid-ads-skills (ours)BothReadsnpx skills add adwarp-dev/paid-ads-skills --skill ad-budget-pacingMIT
Did a change workad-experiment-liftpaid-ads-skills (ours)BothWrites to the change log onlynpx skills add adwarp-dev/paid-ads-skills --skill ad-experiment-liftMIT
Audit 12 platforms from exports/ads auditclaude-ads12, including LinkedIn Ads and Google AdsReads/plugin marketplace add agricidaniel/claude-ads, then /plugin install claude-ads@ai-marketing-hub-claude-adsMIT
Plan paid campaigns on any platformadsmarketingskillsGoogle, Meta, LinkedIn, XReads what you give itnpx skills add coreyhaines31/marketingskills --skill adsMIT
Marketing performance reportperformance-reportAnthropic's marketing pluginAny channelReadsclaude plugin marketplace add anthropics/knowledge-work-plugins, then claude plugin install marketing@knowledge-work-pluginsApache-2.0
Fig. 01The 3 free sets by platforms covered and skill count, from each repo on November 7, 2026: claude-ads spreads 34 skills over 12 platforms, while paid-ads-skills puts 17 into LinkedIn Ads and Google Ads.

Everything in the table is free and works without an account with whoever wrote it. InsightfulPipe's Google audit, further down, is the 1 pick in this post that only runs through its maker's connector.

What a Claude skill is

A skill is a folder. The SKILL.md file inside starts with a short block of YAML frontmatter holding a name and a description, and the instructions follow. The folder can carry more files, such as reference tables or scripts, which Claude opens only when the instructions point to them.

linkedin-ads-pause-rules/
SKILL.md       name, description, then the method Claude follows
README.md      what the skill does, written for people
references/    weekly-run.md, opened only for a scheduled run

Claude loads skills in stages. Anthropic's Agent Skills overview puts the name and description at about 100 tokens per skill, loaded at startup, the body at under 5,000 tokens once a request matches, and bundled files at nothing until Claude reads them. Installing all 17 of ours adds about 1,700 tokens of descriptions to a session, and nothing more until 1 of them fires.

Fig. 02The name and description cost about 100 tokens and are always loaded, while the rest of a skill waits on disk until a request matches it (token figures from Anthropic's Agent Skills overview, checked November 7, 2026).

The description does the matching, so it has to say what the skill does and when to use it. Ours end with the phrases people type, such as "which LinkedIn ads should I pause" and "turn off low CTR ads". In Claude Code you can skip the matching and call a skill by name with /linkedin-ads-pause-rules.

Fig. 03A SKILL.md page for linkedin-ads-pause-rules, where the end of the description holds the phrases people type, so a prompt like "which LinkedIn ads should I pause" lands on it.

The format is an open standard. agentskills.io says Anthropic developed it and released it openly, and the skills CLI's README lists 79 agents that read it, Claude Code, Codex, Cursor and OpenCode among them.

The line between a skill and an MCP server is easiest to see in 1 skill. linkedin-ads-pause-rules holds the method: which ads should stop, in what order, and which are protected. Adwarp, an MCP server, holds the tools, and its update_ad is the call that actually pauses an ad. Without Adwarp, the same skill reads a Campaign Manager export and hands you the list to switch off yourself. The ads MCP servers compared covers the tool side.

Anthropic's overview also warns that a skill can direct Claude to run code, and says to use skills only from sources you trust and to read every bundled file first. That matters more for paid ads than for copywriting: ivangfalco/ads-skills, listed below, ships 39 Python scripts that call the ad platforms' APIs.

How to install them

There are 3 ways in. The skills CLI is the 1 we'd start with, since the same command works for Claude Code, Codex and Cursor. Here they are for our repo:

Install paid-ads-skills
# 1. The skills CLI: Claude Code, Codex, Cursor and 76 more agents
npx skills add adwarp-dev/paid-ads-skills

# 2. A Claude Code plugin (type these inside Claude Code)
/plugin marketplace add adwarp-dev/paid-ads-skills
/plugin install paid-ads-skills@adwarp

# 3. By hand: copy any skill folder
git clone https://github.com/adwarp-dev/paid-ads-skills
cp -r paid-ads-skills/skills/linkedin-ads-audit ~/.claude/skills/
Fig. 04Of the 3 routes, only the skills CLI reaches all 79 agents its README lists, since the plugin installs into Claude Code alone and a hand copy goes to the 1 folder you pick.

Claude Code

npx skills add adwarp-dev/paid-ads-skills asks which skills you want and which agents to install them for. It installs into the current project's .claude/skills/ unless you add -g, which puts them in ~/.claude/skills/ for every project, and --skill linkedin-ads-audit picks 1. The CLI needs Node.js 22.20 or later.

When we ran it from inside a Claude Code session, the CLI noticed it was running under an agent and skipped its questions. Add -a claude-code in that case so the files land where Claude Code reads them.

The plugin route is 2 commands typed in Claude Code: /plugin marketplace add adwarp-dev/paid-ads-skills, then /plugin install paid-ads-skills@adwarp. Plugin skills are namespaced, so you call them as /paid-ads-skills:linkedin-ads-audit. You don't need a restart. The Claude Code skills docs say a session picks up skills added under ~/.claude/skills/ as they arrive, and you only run /reload-skills if that folder didn't exist when the session started.

Codex, Cursor and other agents

The same npx skills add command detects which agents you have installed. The CLI's agent table puts Codex skills in .agents/skills/ (or ~/.agents/skills/ with -g) and Cursor skills in .agents/skills/ (or ~/.cursor/skills/). Name the agent with -a codex or -a cursor to skip the question.

Codex also has a plugin command of its own, codex plugin marketplace add owner/repo, for repos that publish a Codex marketplace file at .agents/plugins/marketplace.json (OpenAI's Codex plugin docs). marketingskills ships that file. Ours doesn't, so in Codex use the skills CLI.

claude.ai and Claude Desktop

In claude.ai you upload a skill as a zip. Zip the skill folder so the folder sits at the root of the archive, open Customize, then Skills, click "+", choose "Create skill" and then "Upload a skill". Anthropic's help center (Using Skills in Claude, checked November 7, 2026) lists Free, Pro, Max, Ultra, Team and Enterprise plans, and code execution has to be on. It describes this 1 upload flow and gives no separate steps for the Claude Desktop app.

The help center's guide to creating custom skills caps the description at 200 characters, against 1,024 in the Agent Skills format. Ours run 470 to 850, so cut the description: line to 200 before you zip, and keep the phrases you actually type. Corey Haines' repo publishes -claude-web.zip files with shortened descriptions for the same reason.

Fig. 05Our 17 descriptions run 470 to 850 characters, so a claude.ai upload, capped at 200, needs a shorter line than the 1,024 the Agent Skills format allows (limits from Anthropic's docs and help center, checked November 7, 2026).

Skills don't sync between surfaces. A skill you upload to claude.ai isn't in Claude Code or the API, and Claude Code's skills live on your disk. For live data in the Claude Desktop app, Adwarp runs as a local server (Claude Desktop setup).

LinkedIn Ads skills

LinkedIn is where the published lists of marketing skills run thin. They cover it with 1 skill that also does Google, Meta and X, and the ones we read name no LinkedIn audit, audience sizing or account-based skill. 10 of our 17 skills are LinkedIn-only, and LinkedIn Ads in Claude Code covers the live setup.

Fig. 06Our 10 LinkedIn skills sorted by when you'd reach for them in an account's life: 2 to plan, 2 to launch, 4 for the weekly running and 2 for upkeep.
Skill, Ask it, Output, Reads or writes
SkillAsk itOutputReads or writes
linkedin-ads-audit"Audit my LinkedIn ads account"28 scored checks and fixes ranked by spend at riskReads
linkedin-ads-performance-review"How are my LinkedIn ads doing?"Scale, pause, refresh and watch lists against like-for-like peersReads
linkedin-ads-spend-analysis"Where is my LinkedIn budget going?"Where the money goes, what returned nothing, the moves worth makingReads, applies a move after your yes
linkedin-ads-lead-drivers"Which LinkedIn ads drive leads?"Drivers, a pause list with the money each ad burned, the angles that winReads, pauses after your yes
linkedin-ads-pause-rules"Which LinkedIn ads should I pause?"Rules you approve once, then a dry run every weekPauses after your yes
linkedin-audience-sizing"How big should this audience be?"A narrowing ladder that lands the audience in rangeReads
linkedin-audience-ops"Audit my matched audiences"Audience health, clean list uploads, Salesforce and HubSpot refreshesUploads after a dry run and your yes
linkedin-abm-builder"Build 1:1 ads for these accounts"An ad set per account: audience, 3 ads, a fixed flightCreates drafts after your yes
linkedin-campaign-launch"Launch a LinkedIn campaign for this"A confirmed brief, sized before spendCreates drafts after your yes
linkedin-ad-library-teardown"What LinkedIn ads is this company running?"Themes, offers, formats, run length and gapsReads public ads only

Every card below is MIT licensed, covers LinkedIn Ads, and installs with npx skills add adwarp-dev/paid-ads-skills --skill <name>. The sessions show the prompt and a trimmed version of the report the skill writes from the made-up Northwind Analytics files.

linkedin-ads-audit

28 checks in 7 groups: tracking, structure and naming, targeting, delivery settings, bidding and budget, creative, and landing pages with their UTM tags. Each check has a pass, warn or fail rule, a LinkedIn source or a labeled default, and the exact fix. The score is weighted by spend. Adwarp can't read Audience Expansion, bids or URL parameters, so in live mode those still come from a settings sheet you fill in. Reads only. Docs.

Fig. 07The audit's scorecard for the made-up Northwind Analytics files: a score of 80, weighted by spend, across 28 checks in 7 groups, with the 11 fails in orange.

claude ~ linkedin ads audit

> Audit my LinkedIn ads account. The exports are in this folder.

LinkedIn Ads audit: Northwind Analytics (made-up data)

2026-09-19 to 2026-10-18: $11,745.40 across 7 active ad sets

28 checks: 2 pass, 14 warn, 11 fail, 1 not scored. Score 80, weighted by spend

D1 fail Audience Expansion on with a matched company list

D2 fail Audience Network took $793.28 (28%) of Finance Leaders, 0 conversions

A1 fail ABM Tier 2 forecast at 240, under the 300 LinkedIn needs

Fixes ranked by spend at risk. Nothing was changed.

linkedin-ads-performance-review

Key numbers by campaign, ad set and ad, each judged against peers with the same objective and audience type, plus week over week direction and creative fatigue. It ends in scale, pause, refresh and watch lists ranked by money at stake. A floor of about 1,000 impressions or 3 results keeps a small number from driving a call. Live, it starts from Adwarp's performance_summary. Reads only. Docs.

claude ~ linkedin performance review

> How are my LinkedIn ads doing?

28 days: $11,174.86 spent (-1%), 63 website conversions against 50

Cost per conversion $128.92, down 22%

Top: Ops Leaders, $157.92 per conversion, 0.78x its peers

Bottom: Finance Leaders, $336.74 per conversion, 1.67x its peers

Pause: 772003 ROI calculator, $862.06 for 0 conversions

Refresh: 771004, click-through rate down 3 weeks running

Leads 3 against 4 this week: under the floor, no call

linkedin-ads-spend-analysis

Spend by campaign, ad set and ad, how concentrated it is against results, and 1 summed figure for the spend that returned nothing, with the rule printed next to it. It also checks each ad set's pacing against its own budget. Every move comes with the exact budget or status change, and nothing moves until you confirm it, through update_campaign with a dry run first. Docs.

claude ~ linkedin spend

> Where is my LinkedIn budget going?

30 days: $21,080 for 59 website conversions and 46 leads

Top ad set 20.9% of spend; 6 of 10 ad sets make 80%

Spend with nothing back: $3,360 (15.9%)

Competitor Users | US: $2,640, 0 conversions, 8.6x the yardstick

Its 231 landing page clicks predict 10.9 conversions: check tracking first

Then pause it and move $30 a day to Ops Leaders

Each move shows the old and new value and waits for your yes.

linkedin-ads-lead-drivers

Ranks ads by what they produced against a yardstick for their peer group and lists the ones that spent with nothing back. For Lead Gen Form ads it compares form opens and completion rates, which tells an ad problem from a form problem. Then it scores hooks, offers and formats head to head inside the same ad set. Pauses run only on the list you confirm. Docs.

claude ~ linkedin lead drivers

> Which LinkedIn ads drive leads?

46 leads at $77.39, 59 conversions at $266.78

2 drivers made 80% of leads on 63% of lead spend

Pause list: 2 ads, $1,420 spent, $1,110 burned

Forms complete at 13.3% to 14.3% on every ad, so the ad sets the cost

Proof hooks won in 4 ad sets and lost in 0

Reply "pause these 2" to apply. Nothing is paused until you do.

linkedin-ads-pause-rules

You approve the rules once and they're saved to pause-rules.md. The defaults are a click-through rate floor per format once an ad has 1,500 impressions in 30 days: single image 0.29%, carousel 0.22%, video 0.17% and thought leader 1.88%, each 70% of ZenABM's median for that format (161,256 ads, updated February 16, 2026). Other formats get no floor until you set one. A run pauses at most 5 ads, highest spend first, and the top 5 ads by conversions and any ad at or under your target cost per conversion are protected. The last active ad in an ad set is never paused, since that would stop the whole ad set. Approving the rules once doesn't approve any run, so each week's list needs its own yes. Docs.

Fig. 08In this dry run on the made-up Northwind export, all 9 ads sit under their format's click-through rate floor, but only 5 reach the pause list, because rules protect 3 and the cap of 5 holds 1 back for the next run.

claude ~ linkedin pause rules

> Run my pause rules.

DRY RUN, nothing has changed

Floors after 1,500 impressions: single image 0.29%, carousel 0.22%, video 0.17%

21 ads read: 5 to pause, 1 to replace first, 1 for next run

Pause list: 5 ads, $1,365 spent, 1 conversion

Reply "pause these 5" to apply.

> pause these 5

adwarp.update_ad 5 ads, dryRun: true: 5 previews

adwarp.update_ad 5 ads, status: PAUSED: PAUSED

adwarp.log_ad_change tags: pause-rules: 5 entries

Paused 5 of 5. Next run: recheck 100000303, replace 100000501 first.

linkedin-audience-sizing

Walks a narrowing ladder: job function, then seniority, then industry, company size and region, and job titles only when needed. It records the estimate after each step and lands the audience in a range for its goal, 400 to 1,000 members for a 1:1 account-based ad set by default. When a step drops under the 300 members LinkedIn needs to serve, it widens. Live, every step is an estimate_audience call. Reads only. Docs.

claude ~ audience sizing

> Size a 1:1 audience for Halvorsen Logistics.

adwarp.estimate_audience Norway or US, company: 6,800

adwarp.estimate_audience + 4 job functions: 2,450

adwarp.estimate_audience + VP or CXO: 260

260 is under the 300 LinkedIn needs to serve. Widening seniority.

adwarp.estimate_audience + Director: 610

610 members, inside the 400 to 1,000 range

$600 a month buys 11.6 impressions per member: expect fast fatigue

linkedin-audience-ops

Lists every matched audience and flags the ones stuck building, under 300, expired, stale or unused, checking exclusion lists first because a stale customer list shows prospecting ads to customers. It cleans uploads down to LinkedIn's template columns with emails hashed. Nothing uploads until you've seen the dry run and said yes to the file, row count, audience name and ad account. Salesforce and HubSpot refreshes work the same way. Docs.

claude ~ matched audiences

> Audit my matched audiences, then clean contacts-raw.csv for upload.

10 audiences, 3 exclusion lists, 6 in live ad sets

Customers - all contacts: exclusion 112 days old, on 3 active ad sets

Webinar registrants Sept: Building for 120 hours, past LinkedIn's 48

Dry run: 653 rows in, 608 kept, 45 dropped

Upload 608 rows as a contact list named "Finance contacts Oct 2026"

to ad account 500000123? Reply yes to upload.

linkedin-abm-builder

Turns a target account list into 1:1 ad sets: company targeting plus the buying group's job functions and seniorities, 3 ads with different angles, a fixed flight, a budget and a landing page. Accounts too small to serve are grouped into a cluster or marked outbound only, and sales gets a coverage CSV. After you confirm the plan, Adwarp creates the campaign, ad sets and ads as LinkedIn drafts. Docs.

Fig. 091 account from the made-up Ledgerloom sample as the builder plans it, with its own ad set on a fixed November 2 to 15 flight and 3 draft ads whose intro text each takes a different angle.

claude ~ abm builder

> Build 1:1 ads for the accounts in accounts.csv.

13 accounts: 10 1:1 ad sets, 1 cluster of 2, 1 outbound only

Flight Nov 2 to Nov 15: 2,142 USD against a 2,500 USD cap

33 ads, 3 angles each. Audience Expansion and Audience Network off

Create 1 campaign, 11 ad sets and 33 ads as LinkedIn drafts? Reply yes.

> yes

adwarp.create_campaign_group ABM Q4 2026: DRAFT

adwarp.create_campaign 11 ad sets: DRAFT

adwarp.create_image_ad 33 ads: DRAFT

Coverage CSV for sales: 13 accounts

linkedin-campaign-launch

Starts from a plain request, like the guide launch below, and fills in a complete brief. It estimates the audience before anything exists and applies safe settings: Audience Expansion and the LinkedIn Audience Network off, your standing exclusions, a conversion attached, and the ad format set at creation because LinkedIn can't change it later. You confirm the plan and it creates drafts. Without Adwarp it writes a build sheet for Campaign Manager. Docs.

Fig. 10The settings the launch skill applies before it creates a draft: website visits picked, Audience Expansion and the Audience Network off, a conversion attached, and the single image format locked, since LinkedIn can't change it later.

claude ~ campaign launch

> Launch a LinkedIn campaign for the 5-day close guide.

Website visits, single image, Nov 3 to Nov 30

Audience 137,500 after 2 of 3 exclusions

107 USD a day, 2,996 USD for the flight (cap 3,000)

Audience Expansion off, Audience Network off, Guide download attached

Competitor employees is Expired: re-upload it before creating

Creation waits for that list, then 1 campaign, 1 ad set and 4 ads as drafts.

linkedin-ad-library-teardown

Reads a company's ads in LinkedIn's public Ad Library, collected by hand or through Adwarp's use of LinkedIn's official Ad Library API, and works out themes, offers, formats, launch cadence, run length and the gaps you can use. It compares up to 3 companies side by side. No scraping, and no ad account access. Docs.

Fig. 11The format mix the teardown found in the made-up Quillmark Payables sample of 24 ads, collected October 15, 2026: single image 58%, video and document 17% each, carousel 8%.

claude ~ ad library teardown

> What LinkedIn ads is Quillmark Payables running?

24 ads collected 2026-10-15, United States and Germany

Themes: faster close 29%, duplicate payments 25%, AI agent 21%

Offers: middle of the funnel 54%, demo 38%, no pricing or trial

Formats: single image 58%, video 17%, document 17%, carousel 8%

Gap: nobody talks to IT and ERP owners since their 2 ERP ads ended

Other LinkedIn Ads skills

We installed each of these with the skills CLI into the same empty project. 3 of them are named linkedin-ads, and each install replaced the folder the one before had written, so put them in separate projects if you want to compare them.

Skill, Repo, Coverage, Reads or writes, License
SkillRepoCoverageReads or writesLicense
ads-linkedinclaude-adsAn audit of measurement, the Insight Tag, audiences, Lead Gen Forms, account-based campaigns, creative, bidding and pacing, from exportsReads. Account changes are switched off for LinkedIn Ads in its capability manifestMIT
adsmarketingskillsStrategy, targeting, bidding and optimization for Google, Meta, LinkedIn and X in 1 file. It ends every recommendation with facts, hypotheses and missing dataReads what you give itMIT
linkedin-adskostja94/marketing-skillsSetup, targeting and optimization guidance with links to LinkedIn's help pages, 1 of 172 skills in the repoReads what you give itMIT
linkedin-adsCold-IQ/ColdIQ-s-GTM-SkillsA strategist that routes to 9 sub-skills, from audiences to bidding, and points you to ColdIQ's own MCP server to build listsReads what you give itNo license file
linkedin-adsivangfalco/ads-skillsStrategy files plus Python scripts that call the LinkedIn, Meta and Google Ads APIs, including campaign creation and updatesWrites through its scripts. Its CLAUDE.md says to start campaigns pausedMIT with the Commons Clause, which bars selling it
Install the other LinkedIn Ads skills
npx skills add AgriciDaniel/claude-ads --skill ads-linkedin -a claude-code
npx skills add coreyhaines31/marketingskills --skill ads -a claude-code
npx skills add kostja94/marketing-skills --skill linkedin-ads -a claude-code
npx skills add Cold-IQ/ColdIQ-s-GTM-Skills --skill linkedin-ads -a claude-code
npx skills add ivangfalco/ads-skills --skill linkedin-ads -a claude-code

claude-ads recommends its plugin over the CLI, because its skills lean on a Python core for scoring. ivangfalco's README says to clone the whole repo and open Claude Code in it, since the shared strategy files and the .env for API keys sit at the repo root.

Google Ads has more skills to choose from than LinkedIn Ads, and most of them are audits. They differ mostly in where the data comes from and whether the skill can write.

Fig. 12Our 3 Google skills end in 3 different things: a report from 50 checks, an Editor file of negatives you import yourself, and 1 campaign that Adwarp creates paused.

All 3 are MIT licensed, cover Google Ads, and install with npx skills add adwarp-dev/paid-ads-skills --skill <name>. The sample data is a made-up crew scheduling company, Fernhill.

50 read-only checks across conversion tracking, auto-tagging, campaign settings, structure, keywords, search terms, negatives, responsive search ads, assets, Performance Max, AI Max, auto-applied recommendations and change history. Each check has a Google Ads Query Language (GAQL) query, a pass, warn or fail rule and a source. Tracking runs first: when it fails, every check that compares cost per conversion is marked unreliable. The report ends in fixes ranked by spend at risk. The full sample is in the last section. Docs.

claude ~ google ads audit

> Audit my Google Ads account. Target CPA $150.

Score 50: 6 pass, 18 warn, 6 fail, 19 not checked, 1 n/a

Spend at risk: $5,366.19 of $19,280.00 (27.8%)

Measurement first: 135 conversions reported, 88 are demo requests

1. Fix conversion counting (C4, C3, C5)

2. Pause or rebuild Search - Competitors: $1,790.00, 0 conversions

3. Turn off search partners and add the negatives from search terms

Takes a product, landing page, location, language and daily budget, and returns a Search campaign brief: keyword research, tight ad groups, a match type plan, starter negatives, responsive search ads checked against Google's character limits, and settings (Search network only, presence targeting, manual bids until about 30 conversions in 30 days). Live, gads_launch_search_campaign runs with validateOnly: true first, so Google checks the whole request and stores nothing. The campaign is created paused, only after your yes. Docs.

Fig. 13The builder sends the same campaign twice: with validateOnly, Google checks the whole request and stores nothing, and only after your yes does the second send create the campaign and its search ad, paused.

claude ~ search campaign builder

> Build a search campaign for our crew scheduling software, $120 a day.

41 ideas from Keyword Planner: 22 in the brief, 8 parked, 11 dropped

3 ad groups at about 5 clicks a day each, Google Search only

adwarp.gads_launch_search_campaign validateOnly: true: valid

Create this campaign, paused, in account 123-456-7890?

> yes

adwarp.gads_launch_search_campaign validateOnly: false: PAUSED

Created paused. Enabling it is your step in Google Ads.

Finds search terms that spend without converting, irrelevant intent and single words that waste money across many terms. It proposes negatives with a match type and a level, drops any negative that would block 1 of your keywords, and lists converting terms worth adding. Adwarp has no tool to add negatives to an existing campaign, so the skill writes a Google Ads Editor file and a paste list, and you review and post them. Docs.

claude ~ search terms

> Where is my search budget leaking?

$17,844.10 across 51 search terms, 108 conversions

Waste: $2,895.20 (16.2%) on terms with 0 conversions

jobs: 6 terms, $1,331.60, 0 conversions, broad negative

Dropped technician: it would block technician scheduling software

Wrote the Editor CSV and a paste list for Universal negatives

Adwarp can't add negatives to existing campaigns. Import them in Editor.

Other Google Ads skills

  • claude-ads, /ads audit google. The ads-google skill covers measurement, Search, Shopping, Performance Max, Demand Gen, keywords and search terms, negatives, assets, bidding, budgets and policy, from exports. It calls itself read-only, and account changes are switched off for Google Ads in its manifest. MIT.
  • Ryze's Google Ads skills. irinabuht12-oss/marketing-skills, "built by Ryze AI", holds 49 skills, most for Google Ads or Meta Ads, including google-ads-audit, search-term-mining and quality-score-breakdown. They run on pasted exports or through Ryze's hosted connector, which its README says has approval-gated writes. Install with claude plugin marketplace add irinabuht12-oss/marketing-skills, then claude plugin install marketing-skills@ryze. The skills CLI found only 1 skill in this repo when we tried it, so use the plugin. No license file.
  • InsightfulPipe's Google Ads Account Audit. A download from its skill page that reads a live account through InsightfulPipe's MCP server, grades it out of 100 across 8 areas and ranks the top 5 fixes by monthly dollar impact. It can add negative keywords, sitelinks and callouts after you approve the exact change, and never touches budgets or bids. No license or price stated. We didn't install it, because it needs their connector.
  • Anthropic's performance-report. Part of the marketing plugin in anthropics/knowledge-work-plugins. It writes a channel report, paid search and social included, from a connected analytics tool such as Supermetrics or from data you paste. It doesn't connect to Google Ads itself. Apache-2.0.

Skills for both platforms

These 4 read LinkedIn Ads and Google Ads together, and work with just 1 if that's all you run. 3 of them are built to run on a schedule, and the 2 daily ones print a single line on a normal day.

Fig. 14A normal week for the cross-platform skills, with the 2 daily checks in the top rows and the report on Monday; lift has no fixed day and reads the days around a logged change.

Each is MIT licensed and installs with npx skills add adwarp-dev/paid-ads-skills --skill <name>.

A fixed format: the last 7 days against the 7 before, per platform and combined, then movers, launches and endings, flags and exactly 3 actions. A mover has to clear 1,000 impressions and 100 USD of spend in both weeks, and 5 conversions a week before cost per conversion counts. The actions are proposals, and a scheduled run never acts on them. Reads only. Docs.

Fig. 15The weekly report's fixed order, filled in from the made-up sample week of October 12 to 18, 2026: spend per platform against the week before, movers, flags and exactly 3 proposed actions.

claude ~ weekly report

> Write the weekly paid report.

Oct 12 to Oct 18, 2026, against Oct 5 to Oct 11

LinkedIn Ads: $6,919 (+18.0%), 35 conversions (-2.8%)

Google Ads: $5,025 (+10.0%), 59 conversions (+22.9%)

Better: Search - Scheduling Software, $87.50 to $62.43 per conversion

Worse: Retargeting - Site Visitors, click-through rate 0.95% to 0.42%

Action 1: pause Search - Competitor Terms, $1,050 and 0 conversions

9 checks on yesterday against recent baselines: tracking breaks, active campaigns with no delivery, spend spikes, cost per conversion jumps, spend with nothing back, click-through rate collapses, stuck or too-small LinkedIn audiences, disapproved Google ads, and campaigns limited by budget while on target. Volume floors keep chance swings from firing. When all is clear it prints 1 line. Reads only. Docs.

claude ~ health check

> Anything on fire in our ads?

Data through Oct 14: 8 alerts, about $1,354 a day at stake

1. LinkedIn, RevOps Leaders - Demo: SPEND SPIKE, $650, 2.4x normal

2. Google, Search - Generic Analytics: TRACKING BREAK, 0 conversions in 2 days

3. LinkedIn, Data Leaders - Demo: cost per conversion 3.6x its baseline

5 more below, each with its fix. A normal morning is 1 line.

ad-experiment-lift

Logs the hypothesis before the change: what changes, why, the metric, the expected effect and the read window. Then it reads before and after on equal windows with data floors, a placebo check on an earlier window, a control and the confounds written out, and returns worked, didn't work or inconclusive. It writes only to the change log, after you see the entry. Docs.

claude ~ experiment lift

> Read the tests in ad-change-log.csv.

3 tests: 1 worked, 1 didn't work, 1 inconclusive

Test 1, outcome-led ads: 14 days before, 14 days after

Cost per conversion $168.52 to $131.76 (-21.8%)

Placebo -0.4%, control +4.6%, net lift -25.2%

WORKED: beat the 15% expected. Conversion rate held (z = -0.2)

ad-budget-pacing

Spend to date plus the last 7 days' daily average times the days left, against a monthly cap per platform and combined. It alerts above 105% or below 85% of a cap by default, with the daily budget change that would land on it. Before it suggests a raise, it checks whether budget is what's holding spend back. Reads only. Docs.

claude ~ budget pacing

> Are we on pace this month?

LinkedIn Ads: OVER. $22,304 projected against $21,000 (106.2%)

Landing on the cap takes $693 a day, $93 less than now

Google Ads: UNDER. $8,598 projected against $10,500 (81.9%)

Budgets aren't the limit: campaigns spent 66% of them

Combined: on track, $30,902 of $31,500 (98.1%)

Nothing has changed. Reply with the budgets you approve.

claude-ads puts most of this into 1 skill, /ads monitor, which checks pacing, delivery, tracking, fatigue, policy and data quality across its 12 platforms. It wants 2 or more saved snapshots of the account, returns observations with a confidence level and likely causes, and doesn't change anything. Ours split that ground into 4 skills, so each can run on its own schedule.

General marketing skill libraries

If you came here for marketing skills in general, these are the big libraries. Each has 1 or 2 skills that touch paid ads.

Fig. 16Orange marks the skills this post names for paid ads in each library: 2 of the 53 in marketingskills, 2 of the 8 in Anthropic's marketing plugin and all 17 in paid-ads-skills (counts from each repo, November 7, 2026).
  • marketingskills by Corey Haines: 53 skills, MIT, 59,050 GitHub stars on November 7, 2026. For paid ads it has ads for campaign strategy and ad-creative for headlines and ad variations at volume. npx skills add coreyhaines31/marketingskills installs the set.
  • Anthropic's marketing plugin in anthropics/knowledge-work-plugins: 8 skills under Apache-2.0, from brand-review to seo-audit. performance-report and campaign-plan are the 2 that touch paid media, and the plugin comes with connector settings for tools such as HubSpot, Ahrefs and Supermetrics.
  • marketing-skills.com: Corey Haines' directory of the same 53 skills, sorted into 8 disciplines with 6 under Ads. Each page gives the npx skills add coreyhaines31/marketingskills --skill <name> line for that skill.

Which skills can change your ad account

Most of these skills only read. When one writes, a tool does the writing, so the tool's rules decide what a change looks like when it lands.

Skill, Reads or writes, Changes, Lands as, The confirm step
SkillReads or writesChangesLands asThe confirm step
linkedin-ads-pause-rulesWritesThe status of single ads, only to pausedLinkedIn, through Adwarp's update_ad, logged in the change journalYou confirm that run's exact list. Rules or a schedule never count
linkedin-ads-lead-driversWritesPauses the ads on the confirmed list. Replacement ads only as draftsLinkedIn, through AdwarpThe exact pause list, in the same session
linkedin-ads-spend-analysisWritesAd set budgets and status, single ad pausesLinkedIn, through update_campaign or update_ad with a dry run firstEach move, by entity, field, old value and new value
linkedin-audience-opsWritesUploads a contact or company listLinkedIn matched audiencesFile, row count, audience name and ad account, after a dry run
linkedin-campaign-launch, linkedin-abm-builderWrites1 campaign, its ad sets and its adsLinkedIn, as draftsThe exact plan. Any change to it means showing it again
google-ads-search-campaign-builderWrites1 Search campaign with budget, ad groups, keywords and adsGoogle Ads, paused, after a validateOnly dry run"Create this campaign, paused, in account <id>?"
ad-experiment-liftWrites to the logA hypothesis entryThe change journal or a CSV, never the ad accountYou see the entry before it's written
google-ads-search-termsWrites a fileNothing in the accountA Google Ads Editor CSV on your diskYou review and post it in Editor
Our other 8ReadsNothing on their ownProposals in the reportAnything you ask for is shown first, with a dry run
claude-adsReadsNothing. Account changes are switched off for LinkedIn Ads and Google AdsDraft proposals in the reportA 6-step approval gate, not yet enabled
Ryze's skillsReadsNothing by themselvesRyze's hosted connector, if you connect itRyze's approval step
InsightfulPipe's auditWritesNegative keywords, sitelinks, calloutsGoogle Ads, through InsightfulPipe's MCP serverYou approve the exact change
ivangfalco's linkedin-adsWritesCampaigns, budgets, bids and statusesLinkedIn Ads, Meta and Google Ads APIs, through Python scriptsIts CLAUDE.md: start campaigns paused, never enable spend without confirmation
marketingskills ads, kostja94 and ColdIQ linkedin-ads, Anthropic's performance-reportReadsNothingAdvice or a reportNone needed
Fig. 1710 of our 17 skills never change an ad account, and the 7 that can all stop at your yes, after which LinkedIn work lands as a draft or a paused ad and Google work lands paused.

Our skills change an account only through Adwarp, and only after you confirm the exact change in the same session. LinkedIn campaigns and ads are created as drafts and go live only when you ask for ACTIVE or switch them on in Campaign Manager, and every ad set Adwarp creates has Audience Expansion and the Audience Network off. A single ad pauses or resumes only when it's named. Google campaigns are created paused after a validateOnly dry run, and Adwarp has no tool that enables a Google campaign. Every change goes to the change journal, and Safety has the full rules.

Run a skill on an export or on live data

Every skill in our set runs both ways, and google-ads-account-audit shows the difference best, because some of its checks can only be made on a live account.

Fig. 18The same skill takes either input: a folder of exports with nothing connected, or live queries through Adwarp or Google's own MCP server, and it writes the same report.

From exports, download the reports the skill names (campaigns, campaigns by network, keywords, search terms, ads, the conversions summary, change history and a Google Ads Editor export), put the CSVs in a folder and start Claude Code there. Nothing connects to the account. Auto-tagging, enhanced conversions, Consent Mode, auto-apply and AI Max never appear in a report, so those checks come back "not checked" unless you add screenshots of the settings pages.

~/ads/fernhill

$ ls

ads.csv campaigns.csv campaigns-by-network.csv change-history.csv conversions.csv

editor-ads.csv editor-campaigns.csv keywords.csv search-terms.csv

$ claude

> Audit my Google Ads account from these exports. Target CPA $150, brand term fernhill.

Export mode: 9 files, 2026-09-21 to 2026-10-20, 4 Search campaigns and 1 Performance Max

19 checks not checked: settings no export carries

Auto-tagging, enhanced conversions, Consent Mode, AI Max: add screenshots

9 fixes ranked by spend at risk, 3 to do first

Live, add Adwarp with claude mcp add adwarp -- npx -y adwarp mcp (install) and finish the Google Ads setup, or follow Google Ads in Claude Code. The skill runs about 30 GAQL queries from its reference file through gads_search, which only takes SELECT queries. Google's Google Ads MCP server works for the same reads through its search tool. Its README also lists write tools for assets and labels, which you can switch off in tools_config.yaml for a read-only setup.

Fig. 195 settings never appear in an export, so from files the audit marks all 5 not checked, while live it queries 4 of them and Consent Mode still needs a screenshot because the API has no field for it.

claude ~ fernhill (sandbox)

$ claude mcp add adwarp -- npx -y adwarp mcp

$ claude

> Audit my Google Ads account for the last 30 days. Target CPA $150.

adwarp.gads_list_accounts : 1 account

adwarp.gads_search Q01 FROM customer: 1 row

adwarp.gads_search Q02 FROM conversion_action: 5 rows

adwarp.gads_search Q04 FROM campaign: 5 rows

adwarp.gads_search Q11 FROM search_term_view: 30 days

The rest of the catalog runs the same way, read-only.

Auto-tagging and conversion tracking now come from the account

Consent Mode still needs a screenshot: the API has no field for it

Here is the full report the skill writes from the export files, so you can see the whole format before you run it.

Full sample report: google-ads-account-audit on the made-up Fernhill exportsShow
google-ads-audit-fernhill.md
# Google Ads audit: Fernhill (made-up account)
Window: 2026-09-21 to 2026-10-20 | Currency: USD | Target CPA: $150.00 (user target)
Data: Export mode: campaigns, network split, Editor campaign rows, keywords, search terms, ads, Editor ad rows, conversions summary, change history | Campaigns in scope: 4 Search, 1 Performance Max | Out of scope: none

## Scorecard
| Area | Pass | Warn | Fail | Not checked | Score |
| --- | --- | --- | --- | --- | --- |
| Conversion tracking | 2 | 3 | 0 | 3 (+1 n/a) | 70 |
| Campaign settings | 2 | 3 | 3 | 1 | 44 |
| Structure | 1 | 0 | 0 | 1 | 100 |
| Keywords | 0 | 4 | 1 | 0 | 40 |
| Search terms | 1 | 2 | 1 | 0 | 50 |
| Negatives | 0 | 0 | 0 | 4 | not scored |
| Responsive search ads | 0 | 4 | 1 | 0 | 40 |
| Assets | 0 | 0 | 0 | 2 | not scored |
| Performance Max | 0 | 0 | 0 | 4 | not scored |
| AI Max | 0 | 0 | 0 | 3 | not scored |
| Recommendations and history | 0 | 2 | 0 | 1 | 50 |
| Overall | 6 | 18 | 6 | 19 (+1 n/a) | 50 |

Defaults used: waste = 0 conversions and cost above 2x target CPA ($300); network and match type CPA flags at 1.5x; budget-limited at 10% lost IS (budget); top keywords = 80% of keyword spend (6 keywords); visible search terms at 70%; change churn above 3 changes in 14 days. Scoring: (passes + 0.5 x warns) / scored checks.

Spend at risk in the window: $5,366.19 (27.8% of $19,280.00 total cost), counting each campaign, keyword and search term once.

Measurement first: reported conversions are 135, so reported CPA is $142.81. Counting only "Demo request (Google tag)" (88), CPA is $219.09, above the $150.00 target. Search - Crew Scheduling (Target CPA) and PMax - All Products (Maximize conversions) bid on the inflated count ($11,040.00 of spend).

## Fixes ranked by spend at risk
| # | Check | Finding | Spend at risk | Fix |
| --- | --- | --- | --- | --- |
| 1 | C4 Double counting | 2 primary "Submit lead form" actions both record conversions: "Demo request (Google tag)" (88) and "GA4 generate_lead" (31) | Blocks bidding ($11,040.00) | Goals > Conversions > Summary: set "GA4 generate_lead" to Secondary, keep "Demo request (Google tag)" as the primary lead action |
| 2 | C3 Micro action as primary | "Calendly link click" (Outbound click, 16 conversions) is primary | Blocks bidding ($11,040.00) | Set "Calendly link click" to Secondary in Action optimization |
| 3 | C5 Counting | "Demo request (Google tag)" (Submit lead form) counts every conversion | Blocks bidding ($11,040.00) | Edit "Demo request (Google tag)" > Count > One |
| 4 | S9 Spends without converting | Search - Competitors: $1,790.00, 350 clicks, 0 conversions. Its 2 broad keywords (K5, S6) and partner traffic (S1) are inside this figure | $1,790.00 | Pause the campaign, or rebuild it with exact competitor + alternative terms, its own landing page and a CPA cap |
| 5 | Q1 Wasted search terms | 5 terms outside Search - Competitors, 0 conversions, each over $300: "crew scheduling jobs" $420.00, "airline crew scheduling" $330.00, "field service technician jobs" $380.00, "truck dispatch software" $470.00, "free scheduling app" $380.00 | $1,980.00 | Run google-ads-search-terms for the negative list and the Editor upload file |
| 6 | S1 Search partners | Search - Crew Scheduling: partners $860.00, 2 conversions (CPA $430.00) against Google Search CPA $133.04 | $593.91 | Campaign settings > Networks on Search - Crew Scheduling: untick Google search partners |
| 7 | S1 Search partners | Search - Field Service: partners $620.00, 1 conversion (CPA $620.00) against Google Search CPA $181.72 | $438.28 | Campaign settings > Networks on Search - Field Service: untick Google search partners |
| 8 | K1 Broad match CPA | Broad keywords in Search - Field Service: $3,064.00, 11 conversions (CPA $278.55) on Manual CPC. Excess over target $1,414.00, minus $850.00 already counted in Q1 | $564.00 | Change "dispatch software" and "scheduling software" to phrase, or move the campaign to Smart Bidding once tracking is fixed (S6) |
| 9 | R5 Disapproved ad | Search - Field Service > Dispatch software - broad: 1 RSA disapproved | Lost reach, no figure | Ads > Status > policy details: remove "#1", "Best ... Ever" and "Guaranteed" claims, then resubmit |

## Upside
| Check | Finding | Estimate | Action |
| --- | --- | --- | --- |
| S7 | Search - Crew Scheduling lost 21.00% of impressions to budget at CPA $143.85 | About 28.4 more conversions a month (52 x 21.00% / 38.50%), a rough estimate. At the demo-request-only CPA ($219.09) this campaign may not be on target: fix C4 first | Move budget from Search - Competitors after the tracking fix confirms the CPA |
| Q4 | "crew scheduling softwares" 2 conversions at $135.00 (close variant of a keyword, optional); "crew scheduling for construction" 3 conversions at $96.67; "crew scheduling app pricing" 2 conversions at $75.00; "field service software for small business" 3 conversions at $120.00; "dispatch software for hvac" 2 conversions at $105.00 | Converting terms that aren't keywords | Add as exact keywords in the ad groups that served them |

## Warnings without a dollar figure
- S2: Search - Crew Scheduling: Display $500.00, 4 conversions (CPA $125.00) against Google Search CPA $133.04.
- S3: Search - Crew Scheduling, Search - Field Service, PMax - All Products use presence or interest ($16,930.00 of spend). Leakage isn't in these exports; connected mode measures it with user_location_view.
- K2: "dispatch software" (broad, $2,274.00, QS 5): expected CTR below average; "crew scheduling app" (phrase, $1,950.00, QS 5): expected CTR below average; "crew scheduling" (phrase, $1,780.00, QS 4): expected CTR and ad relevance below average; "jobber alternative" (broad, $930.00, QS 4): expected CTR and landing page experience below average.
- K3: "crew roster software" (Low search volume); "technician scheduling software" (Low search volume); "field service app" (Below first page bid).
- K4: "crew scheduling app" (phrase match) in Crew scheduling - phrase and Crew app - phrase.
- Q3: Exact $2,425.00 / 42 = $57.74; close variants and broad $4,240.00 / 11 = $385.45.
- R1: Search - Crew Scheduling > Crew scheduling - phrase: 1 enabled RSA; Search - Crew Scheduling > Crew app - phrase: 1 enabled RSA; Search - Field Service > Dispatch software - broad: 1 enabled RSA; Search - Competitors > Competitors: 1 enabled RSA.
- R2: Crew scheduling - exact: Average ($970.00); Crew scheduling - phrase: Poor ($4,240.00); Crew app - phrase: Average ($160.00); Dispatch software - broad: Average ($3,064.00); Competitors: Poor ($1,790.00).
- R3: Crew scheduling - phrase: 6 headlines, 2 descriptions; Crew app - phrase: 8 headlines, 2 descriptions; Dispatch software - broad: 8 headlines, 2 descriptions; Competitors: 5 headlines, 2 descriptions.
- R4: Crew scheduling - phrase: 3 of 6 headlines pinned, positions 1, 2, 3 each hold 1 headline.
- H2: Oct 18, 2026: Keyword added: scheduling software (Broad match) (Search - Field Service); Oct 2, 2026: Networks: Google search partners turned on (Search - Competitors).
- H3: Search - Crew Scheduling: 5 target or budget changes since 2026-10-07 (Target CPA $150.00 to $135.00; Target CPA $160.00 to $150.00; Budget $200.00 to $250.00; Target CPA $140.00 to $160.00; Target CPA $120.00 to $140.00).

## Passed
C1 (5 conversion actions, 3 primary); C2 (3 of 3 primary actions recording conversions); S5 (Search - Crew Scheduling: Target CPA on 52 conversions in 30 days. Info: Search - Brand (Manual CPC, 31 conversions), Search - Field Service (Manual CPC, 30 conversions) could test Smart Bidding); S8 (Rank-limited campaigns (Search - Field Service, Search - Competitors) are over target CPA, so higher bids are the wrong fix; see K1, K2 and S9); T2 (Brand keywords sit only in Search - Brand); Q2 (Search terms cover $11,578.00 of $15,220.00 Search network cost (76.1%). Display expansion cost has no search terms and is left out).

## Not checked
- C7: Enhanced conversions setting is not in any report. Screenshot Goals > Settings, or run query Q01.
- C8: Consent Mode status shows only in Goals > Conversions > Summary > action > Diagnostics.
- C9: Auto-tagging is in Admin > Account settings, not in a report.
- S4: Location criteria need location rows from a Google Ads Editor export, or query Q06.
- T1: Ad group status reasons need query Q08 or an Editor export.
- N1, N2, N3: No negative keyword export in this run (Editor export or queries Q14 and Q15).
- N4: Performance Max runs; the account-level negative list needs query Q15 or Admin > Account settings.
- A1, A2: No asset export in this run (query Q17).
- P1, P2, P3, P4: PMax - All Products runs, but no Performance Max search terms, brand exclusion or asset group data was exported (queries Q18 and Q19).
- X1, X2, X3: AI Max status is a campaign setting outside these exports (queries Q04, Q12, Q13).
- H1: Auto-apply settings are in Recommendations > Auto-apply. Change history shows auto-applied changes (see H2), so auto-apply is on for at least keywords and networks.
- n/a: C6 (No value-based bidding).

## Do these 3 first
1. Fix conversion counting (C4, C3, C5): 1 primary lead action counted once per click. Search - Crew Scheduling sets bids from these numbers today.
2. Pause or rebuild Search - Competitors (S9): $1,790.00 in 30 days with 0 conversions.
3. Turn off search partners on Search - Crew Scheduling and Search - Field Service (S1, $1,032.19 excess cost) and add the negatives from google-ads-search-terms (Q1, $1,980.00).

Put it to work

Paid ads skills

All 17 skills in paid-ads-skills with their install commands, the exports each one reads, and the Adwarp tools it calls for live data.

adwarp.dev/docs/skills

By Stan Rymkiewicz, maintainer of adwarp. Published November 7, 2026.

FAQ

Questions Short answers, with sources.

Ask on GitHub
Does Claude have a marketing skill?

Not built in. Claude's pre-built skills cover Word, Excel, PowerPoint and PDF files, so marketing skills are ones you add: Anthropic's marketing plugin has 8, Corey Haines' marketingskills has 53, and paid-ads-skills has 17 for LinkedIn Ads and Google Ads. Each set installs with 1 command.

What are the best Claude Code skills for marketing?

For marketing in general, start with marketingskills by Corey Haines, 53 MIT-licensed skills from SEO to pricing. For paid ads, pick by the job: linkedin-ads-audit or google-ads-account-audit to audit, paid-media-weekly-report for the Monday report, and linkedin-ads-pause-rules to clean up losing ads every week.

Is there a marketing skills library for Claude Code?

Yes. marketingskills on GitHub holds 53 skills and installs with npx skills add coreyhaines31/marketingskills, and marketing-skills.com lists the same set by discipline. Anthropic's marketing plugin in anthropics/knowledge-work-plugins adds 8 more under Apache-2.0.

What are the top 10 skills for Claude, for a paid ads marketer?

Our picks, 9 of them from our own repo: linkedin-ads-audit, linkedin-ads-performance-review, linkedin-ads-pause-rules, linkedin-audience-sizing, linkedin-campaign-launch, google-ads-account-audit, google-ads-search-terms, paid-media-weekly-report and paid-media-health-check. The 10th is Corey Haines' ads skill, for strategy on Meta and X as well as LinkedIn Ads and Google Ads.

Is there a Claude skill for Google Ads?

Several. paid-ads-skills has 3: google-ads-account-audit with 50 read-only checks, google-ads-search-terms for negative keywords, and google-ads-search-campaign-builder, which ends in a campaign created paused. claude-ads has ads-google, and Ryze publishes a set of Google Ads skills that run on exports or through its own connector.

Is there a Claude skill for LinkedIn Ads?

paid-ads-skills has 10, from an audit with 28 checks to audience sizing, 1:1 account-based ad sets and weekly pause rules. claude-ads has ads-linkedin, an audit from exports, and kostja94, ColdIQ and ivangfalco each publish a skill named linkedin-ads.

Can a Claude skill change my ad account?

Only through a tool that can write, such as an MCP server, and a skill file alone can't reach your account. In paid-ads-skills, 7 of the 17 skills can change an account through Adwarp after you confirm the exact change: LinkedIn work lands as drafts or single paused ads, and a Google campaign is created paused after a validateOnly dry run.

Adwarp's safety rules

What's the difference between a skill and an MCP server?

A skill is a written method: what to pull, how to judge it and what the report looks like. It reaches an ad account only through tools, and an MCP server such as Adwarp is what supplies them. Without a server, the same skill works from a CSV export.

Do these skills work in Codex and Cursor?

Yes. They use the open Agent Skills format, and npx skills add installs them for Claude Code, Codex, Cursor and the other agents the skills CLI supports, 79 in its README on November 7, 2026. Add -a codex or -a cursor to name the agent.

Are they free, and do I need to connect my ad account?

Every skill in this post is free to install, and paid-ads-skills, marketingskills and claude-ads are MIT licensed. You don't need to connect anything: each of our skills names the export it reads, and connecting Adwarp, also free, only adds live data and the option to apply a change you confirm.

Free and open source MIT licensed. Run it locally, self-host the endpoint, or read every line on GitHub.

$ claude mcp add adwarp -- npx -y adwarp mcp

Read the docs

GitHub