Set Up in 30 Seconds
Don't want to code? Copy this prompt into any AI coding tool.
Works with
## Role
You are helping me integrate RankHub webhooks into my web application.
## Context
...morePlatform Overview
RankHub is an SEO autopilot that researches keywords, generates optimized blog articles, and publishes them to your website automatically. The entire pipeline runs on a monthly cycle — from keyword selection to final delivery via webhook.
End-to-End Pipeline
Each delivery includes the article title, slug, HTML and markdown content, featured image, SEO metadata, and tags. Your endpoint verifies the request using a Bearer token and HMAC signature, then creates the blog post in your CMS or database.
You stay in control with headline approval before any content is generated. RankHub handles the research, writing, image generation, and delivery — you approve what gets published.
How Autopilot Works
The autopilot runs on a monthly cycle. Ten days before each month ends, RankHub automatically generates the next month's content calendar, selects keywords from your pool, and creates headlines for approval.
Calendar Generation
RankHub creates a content calendar based on your subscription tier. Posts are spread evenly across the month on your preferred publish day.
Headline Generation
AI generates SEO-optimized headlines for each scheduled post using keywords from your pool. Article types are automatically selected based on search intent.
Your Approval
You receive an email with all headlines for the month. Select which to approve, reject, or skip. You have 5 days to respond.
Draft Generation
Approved posts are queued for generation. RankHub writes the full article, generates a featured image, adds internal links, and formats the HTML.
Publishing & Delivery
On the scheduled date, RankHub runs a semantic similarity check to prevent duplicate content, then delivers the article to your webhook endpoint.
Semantic Safety Check
Before publishing, RankHub compares each article against your existing content using vector embeddings. Articles with >90% similarity to published content are flagged for review instead of auto-publishing.
Content Calendar
Each month, RankHub generates a content calendar that schedules posts evenly across the month. The number of posts depends on your subscription tier.
| Tier | Posts/Month | Frequency |
|---|---|---|
| Starter | 4 | Every 7 days |
| Growth | 15 | Every 2 days |
| Scale | 30 | Daily |
You can configure your preferred publish day (Monday through Sunday) in website settings. Posts are scheduled starting from your preferred day and spread evenly across the month.
Calendars are generated 10 days before each month ends, giving you time to review and approve headlines before the new month begins.
Headline Approval
After headlines are generated, you receive an email with a secure approval link. The approval page shows each headline with its target keyword, search intent, scheduled date, and rationale.
Approval Workflow
- RankHub sends an email with your monthly headlines
- Click the secure approval link (valid for 5 days)
- Review each headline — select or deselect individually
- Submit your selections
- Approved headlines are queued for draft generation
Approved
Queued for draft generation 1 day before the scheduled publish date.
Rejected
Skipped for this month. The keyword returns to the pool.
Expired
No response within 5 days. Headlines are not generated.
Auto-Approval
Enable auto-approval in your content calendar settings to skip the email step. All generated headlines are automatically approved and queued for generation. Best for high-trust editorial workflows.
Article Types
RankHub automatically selects the best article type for each keyword based on search intent. Ten article types cover informational and commercial content.
| Type | Pattern |
|---|---|
HOW_TO Step-by-step tutorials and guides | How to [Goal] with [Method] |
LISTICLE Numbered lists, easy to scan | [N] Ways/Tips to [Goal] |
ULTIMATE_GUIDEPillar Comprehensive pillar content | The Ultimate Guide to [Topic] |
COMPARISON Head-to-head product comparisons | [A] vs [B]: [Key Factor] |
BEST_OF Curated top picks | Best [Solutions] for [Audience] |
PROBLEM_SOLUTION Pain point diagnosis + fix | Why [Problem] and How to Fix It |
CASE_STUDY Real-world success stories | How [Entity] Achieved [Result] |
EXPERT_TIPS Professional advice roundups | [N] Expert Tips for [Goal] |
BEGINNERS_GUIDEPillar Introductory pillar content | [Topic] for Beginners |
ALTERNATIVES Alternative solution roundups | [Competitor] Alternatives |
Pillar Content Strategy
RankHub targets 1–2 pillar posts per month (Ultimate Guide or Beginner's Guide). These comprehensive articles serve as hub pages, with cluster content linking back to them for stronger topic authority.
Content Settings
Configure how RankHub generates content for your website. All settings are available in Settings → Content.
Article Style
Clear, educational tone with balanced detail
Friendly, approachable voice with natural flow
Polished, authoritative tone for B2B audiences
Precise, detailed writing for developer audiences
Featured Image Style
RankHub generates a unique featured image for each article using DALL-E.
Bold text overlays with your brand color
Soft watercolor illustrations
Dramatic, high-contrast photography style
Clean vector illustrations
Hand-drawn sketch aesthetic
Content Features
Number of internal links per article (0–10, default: 3)
Include a CTA section in each article
Embed relevant YouTube videos when available
Generate inline infographic-style visuals
Use emojis in headings and content
Your brand color for featured image text overlays
Free-text instructions applied to every article (tone, topics to avoid, etc.)
Webhook Lifecycle
Article Published
Autopilot writes and finalizes your blog post
Webhook Sent
POST request sent to your endpoint
Retry on Failure
5xx/429 retried up to 5 times
Delivered
Your site receives the article
Article Published
Autopilot writes and finalizes your blog post
Webhook Sent
POST request sent to your endpoint
Retry on Failure
5xx/429 retried up to 5 times
Delivered
Your site receives the article
5xx/429: Retried up to 5 times with exponential backoff (1min, 5min, 15min, 30min, 30min with jitter). Total window: ~51 minutes.
4xx (except 429): Not retried. These indicate a configuration error on your endpoint.
Payload Reference
JSON Body Fields
| Field | Type | Description | Example |
|---|---|---|---|
| api_version | integer | API version number. Currently always 1. | 1 |
| id | string | Unique blog post identifier (CUID format). | "clxyz123abc456def" |
| title | string | Full article title. | "10 Best SEO Tools for 2026" |
| slug | string | URL-safe slug generated from the target keyword. | "best-seo-tools-2026" |
| content_html | string | Sanitized HTML article content. Uses semantic tags only (see Allowed HTML Tags section). | "<h2>Introduction</h2><p>...</p>" |
| content_markdown | string | Original markdown source of the article. | "## Introduction\n\n..." |
| meta_description | string | SEO meta description for the article. | "Discover the best SEO tools..." |
| image_url | string | URL to the featured image (hosted on Google Cloud Storage). | "https://storage.googleapis.com/..." |
| tags | string[] | Array of topic tags for the article. | ["seo", "tools"] |
| created_at | string | ISO 8601 timestamp of when the article was published. | "2026-02-25T10:30:00Z" |
| target_keyword | string | Primary keyword this article is targeting for SEO. | "best seo tools" |
| word_count | integer | Total word count of the article. | 2450 |
| reading_time | integer | Estimated reading time in minutes (based on 200 wpm). | 13 |
HTTP Headers
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Always JSON. Parse the request body as JSON. |
| Authorization | Bearer <your_auth_token> | Bearer token set in your webhook configuration. Compare with your stored token to authenticate. |
| X-RankHub-Delivery-Id | <unique_delivery_id> | Unique identifier for this delivery attempt. Useful for deduplication and debugging. |
| X-RankHub-Signature | sha256=<hmac_sha256_hex> | HMAC-SHA256 signature of the JSON body, signed with your signing secret. Verify to ensure authenticity. |
Allowed HTML Tags
The content_html field only contains these semantic HTML tags. Any h1 tags are automatically converted to h2.
HTTP Headers
Every webhook delivery includes the following HTTP headers. Use these to authenticate the request and verify its integrity.
Content-TypeAlways application/json. Parse the request body as JSON.
AuthorizationBearer token from your webhook settings. Format: Bearer <your_auth_token>. Compare against your stored token to authenticate.
X-RankHub-Delivery-IdUnique identifier for this delivery attempt. Useful for deduplication and debugging. If you receive the same delivery ID twice, it means a retry occurred.
X-RankHub-SignatureHMAC-SHA256 signature of the JSON body, signed with your signing secret. Format: sha256=<hex_digest>. Verify to ensure the request was sent by RankHub and not tampered with.
Authentication
RankHub uses Bearer token authentication. When you set up your webhook in the Settings → Connections page, you provide an auth token. RankHub includes this token in the Authorization header of every delivery.
Your endpoint should extract the token from the header, strip the Bearer prefix, and compare it against your stored token. If the tokens don't match, return a 401 Unauthorized response.
Security Tip
Always verify both the Bearer token and the HMAC signature. The token confirms the sender knows your secret, and the signature confirms the payload has not been modified in transit.
Code Examples
Complete webhook handler examples with Bearer token and HMAC signature verification. Choose your language below.
const express = require('express')
const crypto = require('crypto')
const app = express()
app.post('/webhook/rankhub', express.json(), (req, res) => {
// 1. Verify Bearer token
const token = req.headers.authorization?.replace('Bearer ', '')
if (token !== process.env.RANKHUB_AUTH_TOKEN) {
return res.status(401).json({ error: 'Unauthorized' })
}
// 2. Verify HMAC-SHA256 signature
const signature = req.headers['x-rankhub-signature']
?.replace('sha256=', '')
const expected = crypto
.createHmac('sha256', process.env.RANKHUB_SIGNING_SECRET)
.update(JSON.stringify(req.body))
.digest('hex')
if (!crypto.timingSafeEqual(
Buffer.from(signature || '', 'utf8'),
Buffer.from(expected, 'utf8')
)) {
return res.status(403).json({ error: 'Invalid signature' })
}
// 3. Use the payload
const { title, slug, content_html, meta_description,
image_url, tags } = req.body
// Create your blog post here...
res.status(200).json({ received: true })
})Signature Verification
Every webhook delivery is signed with HMAC-SHA256 using the signing secret from your webhook configuration. Follow these steps to verify:
- Get the raw request body — stringify the JSON body exactly as received (do not re-serialize).
- Compute HMAC-SHA256 — use your signing secret as the key and the raw body as the message.
- Compare hex digests — strip the
sha256=prefix from theX-RankHub-Signatureheader and compare with your computed hex digest. - Use timing-safe comparison — always use a constant-time comparison function to prevent timing attacks.
const crypto = require('crypto')
function verifyWebhookSignature(rawBody, signature, secret) {
// 1. Strip the "sha256=" prefix
const receivedSig = signature.replace('sha256=', '')
// 2. Compute HMAC-SHA256 of the raw request body
const expectedSig = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex')
// 3. Timing-safe comparison to prevent timing attacks
const a = Buffer.from(receivedSig, 'utf8')
const b = Buffer.from(expectedSig, 'utf8')
if (a.length !== b.length) return false
return crypto.timingSafeEqual(a, b)
}Retry Behavior
RankHub automatically retries failed deliveries to ensure your content arrives. The retry policy depends on the HTTP status code your endpoint returns.
| Response | Behavior |
|---|---|
| 200-299 | Delivery successful. No further action. |
| 429 | Rate limited. Retried up to 5 times with exponential backoff. |
| 5xx | Server error. Retried up to 5 times with exponential backoff. |
| 4xx (except 429) | Client error. Not retried. Fix your endpoint configuration. |
Backoff Schedule
Each delay includes +/-10% jitter. Total retry window: approximately 51 minutes. After all retries are exhausted, you receive an in-app notification.
Allowed HTML Tags
The content_html field contains sanitized HTML using only semantic tags. This ensures safe rendering on your website without any script injection or unsupported elements.
Note
Any <h1> tags in the original content are automatically converted to <h2> to preserve your page's heading hierarchy (your page title should be the only h1).
Subscription Plans
RankHub offers three subscription tiers. Each tier determines how many blog posts are generated and published per month. All tiers include the full autopilot pipeline, headline approval, and webhook delivery.
Starter
$19.99/mo
4 posts/month · Weekly
- ✓4 blog posts/month
- ✓Weekly publishing
- ✓AI headline generation
- ✓Email approval workflow
- ✓Webhook delivery
Best for: Small blogs and personal sites
Growth
Popular$49.99/mo
15 posts/month · Every 2 days
- ✓15 blog posts/month
- ✓Bi-weekly publishing
- ✓AI headline generation
- ✓Email approval workflow
- ✓Webhook delivery
- ✓Priority content queue
Best for: Growing businesses and content marketers
Scale
$99.99/mo
30 posts/month · Daily
- ✓30 blog posts/month
- ✓Daily publishing
- ✓AI headline generation
- ✓Email approval workflow
- ✓Webhook delivery
- ✓Priority content queue
- ✓Dedicated support
Best for: Content-heavy sites and agencies
7-Day Trial
All tiers include a 7-day trial for $1.99. Cancel anytime during the trial to avoid the full monthly charge. Billing is handled securely through Polar.
Google Search Console
Connect your Google Search Console to give RankHub real performance data. This helps optimize keyword selection and track how published articles perform in search results.
How to Connect
- Go to Settings → Connections
- Click Connect Google Search Console
- Authorize read-only access to your GSC property
- Select the property that matches your website URL
What Data is Synced
RankHub syncs your search performance data daily. The following metrics are collected per query and page:
Clicks
Click-through count
Impressions
Search appearance count
CTR
Click-through rate
Position
Average SERP position
Read-Only Access
RankHub requests only webmasters.readonly scope. We never modify your Search Console settings, submit URLs, or access any data beyond search analytics. You can disconnect at any time.
Credits & Usage
RankHub uses a credit system for on-demand features outside the autopilot subscription. Credits are consumed when you run keyword research, generate content on demand, or perform website analysis.
| Action | Description |
|---|---|
| Website Analysis | AI-powered analysis of your website, competitors, and audience during onboarding |
| Keyword Research | Manual or auto keyword research with DataForSEO metrics, SERP analysis, and trends |
| Content Generation | On-demand blog draft generation outside the autopilot schedule |
| Image Generation | Featured image creation via DALL-E (included with autopilot drafts) |
| Competitor Analysis | Deep analysis of competitor keyword rankings and content gaps |
Autopilot content generation (drafts, images, and publishing) is included in your subscription and does not consume credits. Credits are only used for on-demand research and analysis features.
Credit Balance
View your current balance and transaction history at Dashboard → Credits. All credit usage is logged with the action type, cost, and timestamp.