Export your data and use webhooks
Your data is yours. Download everything your organization has in RankRight as one zip, and have RankRight tell your other tools the moment a job finishes, a report is filed or an item changes. No polling needed.
- JSON + CSV, every table
- Signed HMAC-SHA256 events
- Automatic retries
Part 1: Export your data
A complete, portable copy of your organization, ready for backups, audits, migrations or your own analysis.
1 Run an export ~2 min
- Open Account and scroll to Data export.
- Click Export organization data. The button changes to Export in progress… while it runs, and only one export runs at a time.
- After a few minutes the file appears in the table with its size, created date and Expires date. Click the file name to download the zip.
Have a webhook subscribed to job.completed? It fires when the export is ready, so your backup script can fetch the file automatically.
What's in the zip
- Every table as JSON and CSV in
data/: clients, services, locations, settings, pages, keywords and rank history, Search Console snapshots, SEO action items, AI Visibility questions, captures, tracker items and runs, jobs, members, API keys and webhooks. - Your filed reports (HTML, PDF and Word files) in
reports/<client folder>/. - manifest.json with row counts per table and the exact columns that were left out.
Secrets never leave RankRight. Passwords, hashes, API key values, signing secrets and tokens are stripped from every table, along with the bulky raw AI-engine payloads. Exports are kept for 7 days.
Part 2: Webhooks
Instead of checking RankRight over and over, let it POST a signed JSON event to your server, Zapier, a CRM or an AI agent as soon as something happens.
2 Add a webhook ~2 min
- On the Account page, scroll to Webhooks.
- Enter your Endpoint URL (https) and an optional Description (e.g. "Zapier" or "our CRM").
- Under Events, leave all ticked, or tick only the events you need.
- Click Add webhook and copy the signing secret (it starts with
whsec_). It's shown once.
Lost the secret? Click Rotate secret. The old one stops working immediately, so update your endpoint straight away.
Events you can subscribe to
| Event | Fires when |
|---|---|
job.completed | A background job finished successfully, such as an export, scan or AI Visibility run. |
job.failed | A background job failed. The error is included. |
job.cancelled | A background job was cancelled. |
aeo.capture.ingested | An AI-engine answer was captured and analyzed for a client. |
aeo.report.saved | A client's monthly AI Visibility report was filed. |
aeo.item.status_changed | An AI Visibility tracker item changed status. |
action_item.status_changed | An SEO action item changed status. |
api.deprecation | An API method or event is scheduled for removal (60 days' notice). |
ping | You clicked Test. |
Every delivery looks like this:
POST https://example.com/hooks/rankright
Content-Type: application/json
User-Agent: RankRight-Webhooks/1.0
X-RankRight-Event: job.completed
X-RankRight-Delivery: 1042
X-RankRight-Timestamp: 1792000000
X-RankRight-Signature: t=1792000000,v1=5f2b…c9e1
{"id": 1042, "event": "job.completed", "created_at": "2026-10-22 14:03:11",
"org_id": 12, "client_id": 34,
"data": {"job_id": 881, "kind": "export_org", "status": "done", "error": "",
"result": {…}, "status_url": "/api/v1/jobs/881"}}
3 Verify the signature ~5 min
Anyone can POST to a public URL, so check that each request really came from RankRight. The X-RankRight-Signature header has the form t=<unix seconds>,v1=<hex>, where v1 is the HMAC-SHA256 of <t>.<raw body> using your signing secret. Here it is in Python:
import hashlib, hmac, time
def verify(secret: str, header: str, body: bytes, tolerance: int = 300) -> bool:
"""secret = your whsec_... value, header = the X-RankRight-Signature
request header, body = the raw request body exactly as received."""
try:
parts = dict(p.split("=", 1) for p in header.split(","))
t, given = int(parts["t"]), parts["v1"]
except (KeyError, ValueError):
return False
if abs(time.time() - t) > tolerance: # reject replays older than 5 min
return False
signed = f"{t}.".encode() + body # "timestamp.body"
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, given)
# Flask example:
# ok = verify(SECRET, request.headers.get("X-RankRight-Signature", ""), request.get_data())
# if not ok: return "", 401
- Use the raw body bytes. Re-serializing parsed JSON changes the bytes and breaks the signature.
- Reject timestamps more than 5 minutes old to block replayed requests.
- Use the
X-RankRight-Deliveryid to ignore duplicates. Retries and redeliveries reuse it.
4 Test, monitor and redeliver ~1 min
- Click Test next to your webhook. A
pingevent shows up under Recent deliveries within a few seconds. - Check the Status, Attempts and HTTP columns. Any 2xx within 10 seconds counts as delivered.
- Failed deliveries retry automatically with growing gaps for about two hours. Click Redeliver to send one again by hand.
After 100 failed attempts in a row, RankRight disables the webhook. Fix your endpoint, then click Enable. Delivery history is kept for 30 days.
Doing it from code
Everything above also works through the RankRight API with an owner-level key.
Start a job
POST /api/v1/jobs with {"kind": "export_org"}, then list files with the list_org_exports method.
Manage hooks
register_webhook, list_webhooks, test_webhook, rotate_webhook_secret and redeliver_webhook.
Ask Claude
Connect Claude Code and just say "list my webhooks" or "show recent webhook deliveries that failed".
Full reference: API docs → Webhooks. To connect Claude, see Connect Claude Code to RankRight.
Questions
The short answers. The API docs have the details.
Who can export data or manage webhooks?
What's in the export zip?
Is anything left out of the export?
How long can I download an export?
What counts as a successful webhook delivery?
Why did my webhook get disabled?
Can I send webhooks to an internal server?
Keep going
Guides that pair well with this one.
Connect Claude Code to RankRight
Connect Claude Code to your RankRight data in five minutes. Mint an API key, run one command, then ask about your clients in plain English.
Read the guide → 15 minSingle sign-on with Google, Microsoft or Okta
Let your team sign in with your company identity provider. Set up OpenID Connect or SAML 2.0 for Google Workspace, Microsoft Entra ID, Okta and others.
Read the guide → 5 minInvite your team and choose roles
Invite teammates with a link, choose the right role (owner, SEO editor, web builder or viewer), manage access and turn on two-factor sign-in.
Read the guide →