Pinterest — Channel Overview
Researched: May 2026
Why This Channel
Pinterest is a visual discovery engine — 85% of weekly Pinners have made a purchase based on a Pin. For Leadmetrics clients in e-commerce, home decor, food & beverage, fitness, fashion, and local services, Pinterest is often the highest-intent traffic source. Unlike social media, Pins have a 6-month+ lifespan compared to hours for Instagram or Twitter. Content published once continues driving clicks for months.
Pinterest is the natural complement to Instagram in Leadmetrics’ social publishing stack: same image-first content, different audience intent (discovery vs. community), different content format (vertical images + keyword-rich descriptions). The Social Post Writer and Designer already produce visual content — adapting for Pinterest format is a relatively small extension.
Auth Mechanism
OAuth 2.0 (standard authorization code flow).
- Auth URL:
https://www.pinterest.com/oauth/ - Token URL:
https://api.pinterest.com/v5/oauth/token - Scopes:
boards:read boards:write pins:read pins:write user_accounts:read - Token refresh: access token expires in 30 days; refresh token in 365 days
Sub-channel selection: after OAuth, the user selects which Pinterest Board to publish to (similar to Facebook Page selection). Stored as subChannelInfo.id = boardId.
What It Enables
| Capability | Detail |
|---|---|
| Publishing | Create Pins on selected board: image + title (100 chars) + description (500 chars) + link |
| Board management | List boards for selection; create new boards via API |
| Analytics | Pin impressions, saves (repins), link clicks, engagement rate per Pin |
| Insight worker | Top performing pins; board growth; best content categories; peak save times |
Workers Needed
| Worker | Queue | Trigger |
|---|---|---|
social-publisher.worker.ts — add case "pinterest" | agent__social-publisher | SocialPost status → scheduled |
pinterest-insights.worker.ts (new) | agent__pinterest-insights | Weekly |
Social Post Writer Integration
The social-post-writer.worker.ts needs a Pinterest content branch:
- Format: Vertical image (2:3 ratio, 1000×1500px) + keyword-rich title + description with natural language (not hashtag-heavy like Instagram)
- SEO note: Pinterest descriptions function like Google meta descriptions — keywords matter for discoverability in Pinterest Search
- Link: Every Pin should include a destination URL (landing page, blog post, or product page)
Add platform: "Pinterest" case to the prompt builder and SCENE_MAP in the Social Post Designer.
Insight Worker Output (ChannelInsight)
- Total impressions and saves over 30 days
- Top 5 pins by save rate
- Board follower growth trend
- Peak engagement days / hours
- Most effective content categories (recipes vs. how-to vs. product vs. lifestyle)
- Suggested: next Pin concept based on top-performing themes
Channel Detail Page — PinterestChannelDetail.tsx
Tabs:
- Overview — board stats, follower count, total pins
- Top Pins — sorted by saves or impressions; thumbnail preview + metrics
- Insights — AI-generated summary of what’s working
- Suggestions — action items from the insight worker
Implementation Plan
Phase 1 — Connect + Publish
-
Create
packages/providers/pinterest/src/index.ts:getAuthUrl(callbackUrl, channelId)— auth URL + stateexchangeCode(code, callbackUrl)— returns tokens +userIdrefreshAccessToken(refreshToken)— returns new access tokengetBoards(accessToken)—GET /v5/boards— list user boardscreatePin(accessToken, boardId, pin)—POST /v5/pinswith image URL + title + description + linkverify()—GET /v5/user_account
-
Add OAuth routes to
apps/api/src/routers/channel-connect.ts:GET /pinterest/connect→ return auth URLGET /pinterest/callback→ exchange code, redirect to board selectGET /pinterest/page/select→ list boardsPOST /pinterest/page/select→ save selected board assubChannelInfo
-
Add
case "pinterest"tosocial-publisher.worker.ts -
Add
platform: "Pinterest"toSocialPostenum in Prisma schema -
Add seed entry to
packages/db/prisma/seed.ts -
Create
apps/dashboard/src/app/(dashboard)/channels/[id]/PinterestChannelDetail.tsx
Phase 2 — Analytics + Insights
-
Create
packages/providers/pinterest/src/analytics.ts:getPinMetrics(accessToken, pinIds[])— batch impressions + saves + clicksgetBoardAnalytics(accessToken, boardId, period)— board-level metrics
-
Create
packages/agents/src/workers/insights/pinterest-insights.worker.ts
Seed Entry
// packages/db/prisma/seed.ts — CHANNEL_CATALOGUE
{
type: "Pinterest",
name: "Pinterest",
iconKey: "pinterest",
description: "Publish Pins to Pinterest boards and track impressions and saves.",
authenticationType: "oauth2",
requiresUrl: false,
isActive: true,
categories: ["social_media"],
},