Zapier
Connect Soke to 5,000+ apps with Zapier webhooks — step-by-step guides for common content optimization workflows.
Zapier Integration
Use Soke with Zapier to connect content optimization to 5,000+ apps. Since Soke is API-first, you'll use the Webhooks by Zapier action to call endpoints directly.
What you can build
- Google Sheets pipelines — new row triggers keyword research, results written back automatically
- Content optimization chains — multi-step Zaps that chain keywords → titles → descriptions
- Slack/email alerts — get notified when trend scans or competitor analyses complete
- CMS automation — automatically generate optimized metadata for new content drafts
Prerequisites
- Zapier account — Pro plan or higher recommended for multi-step Zaps
- Soke API key — get one from your Soke dashboard
Authentication Setup
All Soke API calls in Zapier use the Webhooks by Zapier action with custom headers.
Add a Webhooks action
In your Zap, add an action step:
- Search for Webhooks by Zapier
- Select Custom Request
- Configure the fields:
| Field | Value |
|---|---|
| Method | POST |
| URL | https://api.usesoke.ai/api/v1/research/keywords |
| Data | Your JSON payload (see examples below) |
Set headers
In the Headers field, add:
Content-Type: application/json
X-Soke-Key: sk_live_your_api_keyEach header goes on its own line in the format Key: Value.
Set the data payload
In the Data field, enter your JSON body:
{
"topic": "productivity tips for developers",
"platform": "youtube"
}To use dynamic data from a trigger or previous step, use Zapier's field mapping:
{
"topic": "{{steps.trigger.topic}}",
"platform": "youtube"
}Test the step
Click Test step. Zapier will show the parsed response. You should see fields like:
data__success:truedata__data__keywords: (array of results)data__meta__processing_time_ms: (number)
Zapier flattens nested JSON with double underscores (__).
Understanding Soke Responses in Zapier
Zapier flattens nested JSON responses. Here's how Soke's standard envelope maps:
| Soke field | Zapier field name |
|---|---|
success | data__success |
data.keywords[0].keyword | data__data__keywords[]keyword |
data.longTailPhrases | data__data__longTailPhrases |
meta.processing_time_ms | data__meta__processing_time_ms |
error.code | data__error__code |
error.message | data__error__message |
Use Zapier's Formatter by Zapier → Utilities → Line Itemizer to work with arrays. This converts a JSON array into individual items you can iterate over in subsequent steps.
Zap: Keyword Research from Google Sheets
Automatically research keywords when a new row is added to a spreadsheet.
Trigger: New Spreadsheet Row
- App: Google Sheets
- Event: New Spreadsheet Row
- Spreadsheet: Select your content planning spreadsheet
- Worksheet: Select the sheet with your topics
The trigger fires when you add a new row with a topic in a designated column (e.g., Column A = "Topic").
Action: Research Keywords
- App: Webhooks by Zapier
- Event: Custom Request
- Method: POST
- URL:
https://api.usesoke.ai/api/v1/research/keywords - Headers:
Content-Type: application/json X-Soke-Key: sk_live_your_api_key - Data:
{ "topic": "{{steps.trigger.columnA}}", "platform": "youtube", "maxResults": 10 }
Replace columnA with the actual column name from your spreadsheet.
Action: Update Spreadsheet Row
- App: Google Sheets
- Event: Update Spreadsheet Row
- Row: Use the trigger's row number
- Map fields:
- Top Keyword column:
{{steps.research_keywords.data__data__keywords[]keyword}}(first item) - Competition Score column:
{{steps.research_keywords.data__data__keywords[]competitionScore}} - Trend Direction column:
{{steps.research_keywords.data__data__keywords[]trendDirection}} - Long Tail Phrases column:
{{steps.research_keywords.data__data__longTailPhrases}}
- Top Keyword column:
Zap: Content Optimization Pipeline
Chain keyword research → title optimization → description generation in a single multi-step Zap.
Total credits per run: 8 (2 + 3 + 3)
Step 1: Research Keywords
Webhooks by Zapier → Custom Request:
- Method: POST
- URL:
https://api.usesoke.ai/api/v1/research/keywords - Headers:
Content-Type: application/jsonandX-Soke-Key: sk_live_... - Data:
{ "topic": "your topic here", "platform": "youtube", "maxResults": 10 }
Step 2: Extract Keywords with Formatter
Add a Formatter by Zapier step to extract keyword names:
- Event: Utilities → Lookup Table (or use Text → Extract Pattern)
- Map the keywords array from Step 1 into a comma-separated string
Alternatively, reference the first few keywords directly:
{{steps.step1.data__data__keywords[]keyword}}
Step 3: Optimize Title
Webhooks by Zapier → Custom Request:
- Method: POST
- URL:
https://api.usesoke.ai/api/v1/content/optimize-title - Data:
{ "draftTitle": "How to be productive as a developer", "platform": "youtube", "keywords": ["{{steps.step2.output}}"] }
Step 4: Generate Description
Webhooks by Zapier → Custom Request:
- Method: POST
- URL:
https://api.usesoke.ai/api/v1/content/generate-description - Data:
{ "title": "{{steps.step3.data__data__alternatives[]title}}", "platform": "youtube", "keywords": ["{{steps.step2.output}}"], "tone": "casual" }
Step 5: Output
Send results to your destination:
- Google Sheets: Update a row with the optimized title and description
- Slack: Post a message with the results
- Notion: Create a new page with the content
Map these fields:
- Optimized title:
{{steps.step3.data__data__alternatives[]title}} - Title score:
{{steps.step3.data__data__alternatives[]overallScore}} - Description:
{{steps.step4.data__data__description}}
Zap: Title Scoring
Score an existing title to identify improvements.
- Trigger: Manual, schedule, or new spreadsheet row
- Action: Webhooks by Zapier → Custom Request
- Method: POST
- URL:
https://api.usesoke.ai/api/v1/content/score - Data:
{ "content": "10 Developer Productivity Hacks That Actually Work", "platform": "youtube", "targetKeywords": ["developer productivity"] }
- Action: Send results (overall score, breakdown, suggestions) to Sheets/Slack/email
Key fields to map:
- Overall score:
data__data__overallScore - Keyword placement:
data__data__breakdown__keywordPlacement__value - Suggestions:
data__data__breakdown__emotionalPull__suggestion(and other dimensions)
Zap: Chat Completions
Use Soke's chat endpoint for flexible, natural language content tasks:
- Method: POST
- URL:
https://api.usesoke.ai/api/v1/chat/completions - Data:
{ "messages": [ { "role": "user", "content": "Research keywords for cooking tutorials and suggest 3 optimized titles" } ], "platform": "youtube", "model": "soke-v1", "stream": false }
Map response fields:
- AI response:
data__choices[]message__content - Services used:
data__choices[]message__data__services_used
Handling Async Operations
Thumbnail generation and transcription are async — they return a job ID and you poll for results.
Polling pattern in Zapier
Start the async job
Webhooks by Zapier → Custom Request to start thumbnail generation or transcription (see Thumbnail or Transcription docs). For thumbnails, we recommend using a templateId from a saved thumbnail template for consistent styling — just pass the templateId, title, prompt, and platform. Supported resolutions: 1280x720 (landscape) or 1080x1920 (portrait/shorts).
Add a Delay
Use Delay by Zapier:
- Delay for: 30 seconds (thumbnails) or 60 seconds (transcription)
This gives the server time to process before polling.
Poll for status
Webhooks by Zapier → Custom Request:
- Method: GET
- URL:
https://api.usesoke.ai/api/v1/thumbnail/{{steps.start_job.data__data__id}}(thumbnail) orhttps://api.usesoke.ai/api/v1/transcription/{{steps.start_job.data__data__id}}(transcription) - Headers:
X-Soke-Key: sk_live_...
Check completion with Paths
Use Paths by Zapier (requires Professional plan):
Path A — Completed:
- Condition:
data__data__statusisCompleted(thumbnail) orcompleted(transcription) - Continue to output step
Path B — Still processing:
- Condition:
data__data__statusis notCompleted/completed - Add another Delay + Poll step (Zapier doesn't support loops, so you'll need to chain additional delay+poll steps for reliability)
Error Handling
Using Paths for error checking
After each Webhooks step, add a Paths by Zapier step:
Path A — Success:
- Condition:
data__successistrue - Continue to next processing step
Path B — Error:
- Condition:
data__successisfalse - Action: Send notification with
data__error__codeanddata__error__message
Common error codes
| Code | Status | What to do |
|---|---|---|
RATE_LIMIT_EXCEEDED | 429 | Add a Delay step and retry |
INSUFFICIENT_CREDITS | 402 | Notify yourself to purchase more credits |
SUBSCRIPTION_REQUIRED | 403 | Subscription is inactive — check billing |
PLATFORM_NOT_IMPLEMENTED | 501 | Platform not yet supported |
| Server errors | 5xx | Credits are auto-refunded; retry after delay |
Tips & Limitations
Zapier-specific considerations
- No workflow import — unlike n8n and Make, Zapier doesn't support importing workflow JSON files. Use the step-by-step guides above to build your Zaps manually
- Multi-step requires Pro — chaining multiple Webhooks actions requires a Zapier Professional plan or higher
- Paths require Professional — the Paths feature for conditional logic requires Professional plan
- No native loops — for async polling, chain multiple delay+poll steps rather than looping
Credit management
- A keyword research Zap uses 2 credits per run
- A full content pipeline uses 8 credits per run
- Chat completions use 5 credits per run
- Monitor usage with
GET /api/v1/usage/summaryin a scheduled Zap
Best practices
- Always include
"platform": "youtube"— it's technically optional (defaults to youtube), but being explicit prevents confusion - Use Formatter steps — Zapier's Formatter by Zapier app helps extract and transform nested JSON data between steps
- Test each step individually — Zapier lets you test each step before moving to the next. Use this to verify your JSON payloads and field mappings
- Set up error notifications — add a Paths step after critical Webhooks actions to catch and alert on failures
Check your plan's credit limits and rate limits on the Rate Limiting & Credits page to plan your Zap usage accordingly.