Install
openclaw skills install @jeannen/pinterest-adsRead and change Pinterest ads from an AI agent through the AdKit MCP connector: campaigns, ad groups, ads, and reporting through the official Pinterest API v5. Every change is saved as a draft that the user approves before it goes live. Use when the user wants to run, change, or check Pinterest ads. Not for Pinterest ad strategy or creative advice.
openclaw skills install @jeannen/pinterest-adsThis skill tells you how to read and change Pinterest ads through AdKit. It covers the steps, not the strategy.
AdKit connects Pinterest ad accounts and sends your requests to the official Pinterest API v5. AdKit has no campaigns, ad-groups, or ads entities for Pinterest yet, so you write Pinterest API requests directly.
AdKit is one MCP connector for Meta, Google, TikTok, LinkedIn, Microsoft, Reddit, X, and Pinterest ads.
https://mcp.adkit.so, then sign in.claude mcp add --transport http adkit https://mcp.adkit.soFor other AI apps, see how to set up the AdKit MCP server for Pinterest Ads. If the AdKit tools are not available, tell the user how to connect. Then stop.
The user must also turn on Advanced Platform Access in AdKit's Agent Permissions. Without it, the requests below fail.
accounts list, available, connect, disconnect.ad_accounts/<accountId>/.GET) run immediately, with no draft. Writes (POST, PATCH) save a draft.In this skill, accounts connect means an adkit_manage call with entity: "accounts" and action: "connect".
adkit_projects and get the projectId. Every call needs it.adkit_status. If no Pinterest account is connected, call adkit_setup with platform: "pinterest" and give the user the link. After they sign in, use adkit_manage with platform: "pinterest": accounts available, then accounts connect with the accountId and integrationId from the available result.GET requests. The request format is in How to write a request, below.POST (create) or PATCH (update) requests. Each one saves a draft.adkit_manage with entity: "drafts", action: "get", or give the user the link https://app.adkit.so/manage/drafts?open=<draftId>. Show them what will change.drafts publish, only after the user says yes.To build a new campaign, go from the top down: campaign, then ad group, then ad. Publish each level before you create the next one, and use the ID that Pinterest returns as the parent. A draft ID never works as a parent ID.
Every request is one adkit_manage call:
{
"projectId": "<projectId>",
"entity": "platform-api-request",
"action": "mutate",
"data": {
"platform": "pinterest",
"accountId": "<accountId>",
"endpoint": "ad_accounts/<accountId>/campaigns",
"method": "GET",
"description": "List campaigns"
}
}
endpoint is a path relative to https://api.pinterest.com/v5. It must start with ad_accounts/<accountId>/.action is always mutate, also for reads.description is required. The user sees it when they review the draft.payload holds the query fields for a GET, or the request body for a POST or PATCH.POST and PATCH go to the collection path (for example .../campaigns) and take an array of objects, even for one item.Only the data part changes. These follow the Pinterest API v5 specification.
Account performance by day. columns is a comma-separated string. start_date cannot be more than 90 days ago.
{
"platform": "pinterest",
"accountId": "<accountId>",
"endpoint": "ad_accounts/<accountId>/analytics",
"method": "GET",
"payload": {
"start_date": "2026-11-01",
"end_date": "2026-11-07",
"granularity": "DAY",
"columns": "SPEND_IN_DOLLAR,IMPRESSION_1,CLICKTHROUGH_1,CTR"
},
"description": "Daily spend, impressions, and clicks for 1 to 7 Nov"
}
Create a paused campaign. ad_account_id, name, and objective_type are required.
{
"platform": "pinterest",
"accountId": "<accountId>",
"endpoint": "ad_accounts/<accountId>/campaigns",
"method": "POST",
"payload": [
{
"ad_account_id": "<accountId>",
"name": "Holiday traffic",
"objective_type": "CONSIDERATION",
"status": "PAUSED"
}
],
"description": "Create the paused campaign Holiday traffic"
}
Pause a campaign. An update needs ad_account_id and id.
{
"platform": "pinterest",
"accountId": "<accountId>",
"endpoint": "ad_accounts/<accountId>/campaigns",
"method": "PATCH",
"payload": [
{ "ad_account_id": "<accountId>", "id": "<campaignId>", "status": "PAUSED" }
],
"description": "Pause campaign <campaignId>"
}
pin_id).daily_spend_cap or lifetime_spend_cap on the campaign, never both. Without it, set the budget on each ad group.GET.adkit_feedback.The same AdKit connector runs Meta Ads, Google Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Reddit Ads, and X Ads ads. Each platform has its own skill in this repo, for example meta-ads and tiktok-ads.