Documentation

RankFlow docs

Everything you need to get started, automate via the API, and solve common issues.

Getting started

From signup to your first AI recommendation in five steps. The whole flow runs inside our onboarding wizard at /onboarding, but here's what happens at each step so you know what to expect.

1. Create your account

Sign up with email + password or "Continue with Google". We create a personal workspace and start your 14-day Pro trial automatically — no credit card needed.

2. Add your first website

Just the domain — no need for the protocol or trailing slash. We normalise https://www.example.com/some/path to example.com for you.

3. Connect Google (Search Console + Analytics)

Read-only OAuth grant. We use Search Console for top queries / CTR / impressions and GA4 for engagement metrics. Disconnect any time from the GSC site page.

4. Pick keywords to track

We pre-suggest keywords based on your domain. Pick what matters, add your own, and we'll check daily ranks (or weekly on Starter) starting tomorrow.

5. Run your first audit

Crawls up to 100 pages on Starter, 500 on Pro, 1,000 on Agency. You'll get a health score, prioritised issues, and AI-written fix recommendations — usually in 1–3 minutes.

API reference

RankFlow exposes a JSON REST API for the data you've collected. Base URL: https://rankflow.my/api/v1.

Authentication

All endpoints require a bearer token. Generate one from Settings → API. Tokens look like rf_live_… (production) or rf_test_… (sandbox).

curl https://rankflow.my/api/v1/projects \
  -H "Authorization: Bearer rf_live_..."

Response envelope

Every response is wrapped in { "data": …, "meta": … }. The meta block carries the live quota numbers and a server timestamp:

{
  "data": [...],
  "meta": {
    "api_calls_today": 142,
    "api_calls_limit": 1000,
    "timestamp": "2026-05-11T14:00:00+08:00"
  }
}

Scopes

Tokens carry granular scopes. Required scope is listed per endpoint below.

  • read:projects — list + view sites
  • read:rankings — read rank tracking data
  • read:audit — read audit results
  • read:keywords — read keyword research data
  • write:audit — trigger new audits

Endpoints

Method Path Scope Description
GET /v1/projects read:projects List sites in the workspace.
GET /v1/projects/{site} read:projects Get a single site with health score + last crawled.
GET /v1/projects/{site}/rankings read:rankings Active rank trackings with latest position.
GET /v1/projects/{site}/rankings/{tracking}/history read:rankings Last 90 rank checks for one keyword.
GET /v1/projects/{site}/audit read:audit Latest crawl batch summary + health score.
POST /v1/projects/{site}/audit write:audit Queue a new audit. Returns 202.
GET /v1/projects/{site}/keywords read:keywords Saved keywords with metrics.

Rate limits

Per-plan daily caps on bearer tokens:

  • Starter — no API access (upgrade to Pro)
  • Pro — 1,000 calls/day
  • Agency — 10,000 calls/day

Every response includes X-RateLimit-Limit and X-RateLimit-Remaining headers. When you exceed the cap you'll get 429 Too Many Requests with a reset_at timestamp in the body.

Webhooks

Register HTTPS endpoints at Settings → Webhooks to receive real-time POST requests when key events fire.

Available events

  • audit.completed — a crawl finished and AI summary is ready
  • ranking.changed — a tracked keyword moved ≥3 positions
  • backlinks.updated — daily sync new/lost counts
  • report.generated — a scheduled or one-off report finished

Payload + headers

POST https://your.app/webhook
Content-Type: application/json
X-RankFlow-Event: audit.completed
X-RankFlow-Signature: 8f2c9... (HMAC-SHA256 of the raw body)
X-RankFlow-Delivery: 019e... (unique per attempt)

{
  "event": "audit.completed",
  "timestamp": "2026-05-11T14:00:00+08:00",
  "data": { "batch_id": "...", "site_id": "...", "domain": "...", "health_score": 78 }
}

Verifying signatures

Always verify the X-RankFlow-Signature header to confirm the request is from us. The signature is the HMAC-SHA256 of the raw request body using your webhook secret. Constant-time comparison only:

// Node.js
const expected = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-rankflow-signature']));

Non-2xx responses trigger 2 retries with exponential backoff (10s, 30s, 90s) — 3 attempts total.

FAQ

Where is my data stored?

On servers in Asia (Contabo VPS). Google OAuth tokens are encrypted at rest. We never share your data with third parties.

Can I cancel any time?

Yes. From Settings → Billing. There are no contracts or cancellation fees. You keep access until the end of the period you paid for.

What's the difference between the plans?

Starter is for solo founders (3 sites, weekly rank checks). Pro is for SMEs (15 sites, daily checks, AI audit, GSC, content writer). Agency is for freelancers + agencies (unlimited sites, white-label client portal, API access, team seats).

Do you support Malay-language SEO?

Yes — defaults to MY location codes (2458 in DataForSEO), MYR pricing, and our AI keyword recommender flags Malay-language opportunities specifically.

How do I white-label reports for my clients?

Pro and Agency plans support full white-label. Upload your logo, set your brand colors, and customise the footer at Settings → Branding. Agency adds custom domain support for the client portal.

Does RankFlow work with my CMS?

Yes — we crawl any website that serves HTML. Schema markup is generated as JSON-LD that you paste into your <head>. WordPress / Webflow / Shopify / static sites all work.

Why don't I see my GSC data immediately?

GSC sync runs daily at 2 AM Asia/Kuala_Lumpur. After you connect, expect data to appear the next morning. Existing properties may take Google a day or two to populate after a fresh connection.

Support