AI writes.
Models draft the fix, one check at a time, and you see it as a diff. They never decide the verdict, and the gate re-scores whatever they write.
The intelligence engineIllustration: drafts move along a rail through a gate. Drafts that pass continue. One draft is held with the flagged checks internal_linking and slop.
For B2B content teams
Dokeo is the quality gate between AI drafts and publish, like CI for content. 19 core checks across SEO, AEO and GEO return one verdict, ship or fix, under 200 ms.
No account needed. Start free for 100 scans a month, or read the docs.
Works in the browser, the CLI and Claude. How Dokeo works
AI is fast and unaccountable. Rules are slow to write and always the same. People are the ones who answer for what ships. Dokeo gives each one only its own job.
Models draft the fix, one check at a time, and you see it as a diff. They never decide the verdict, and the gate re-scores whatever they write.
The intelligence engine19 core checks and your own brand rules, with no model in the path. The same text gets the same verdict, and you can replay it later to prove it.
The deterministic engineFixes are suggestions until you accept them, and a passing draft goes to review. Dokeo never sends anything for you.
Decisions and approvalMore drafts than anyone can read before they go live. Dokeo is the check on every draft, the same way tests run on every commit.
Between the draft and the publish button. One verdict per draft, and the same answer every time you run it.
Drafts arrive from the repo, the terminal, a script or an agent.
Dokeo detects the content type and runs the checks that apply. Every check is documented, and the same draft always gets the same result.
Each check returns its reason and its fix. The draft gets one verdict.
You choose the threshold. Dokeo holds that line.
Search engines rank pages, answer engines lift passages, and generative engines pick what to cite. Dokeo scores SEO, AEO and GEO together.
near_duplicatecannibalisationstructurekeyword_coverageschema_markuptechnical_seointernal_linkingaeoreadabilitygrammarentity_densityeeatslopclaimsgeocitation_quality19 core checks, every one documented.Content rows in the catalog. Type-specific rules switch on for each of the 17 content types, so a changelog is not judged like a landing page.
Browse the checks reference6 rules on top of the 19 core checks. 1 can fail the draft on their own.
landing_page.headline_lengthlanding_page.no_benefitlanding_page.no_social_prooflanding_page.weak_social_prooflanding_page.no_ctalanding_page.too_many_ctasREST, the CLI and MCP are usable today. The GitHub Action is public as rasulshaikh/dokeo-action@v1. CI scans use the automated allowance on Growth and above. Change fail_on below to see what holds a merge.
name: Content Gate
on:
pull_request:
paths:
- "**/*.md"
- "**/*.mdx"
jobs:
dokeo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: rasulshaikh/dokeo-action@v1
with:
api_key: ${{ secrets.DOKEO_API_KEY }}
content_type: blog
paths: "**/*.md"
fail_on: fail
min_score: 70
comment_pr: true# Real scan of our own post, from web/lib/home-scan.json
# verdict WARNING
# overall 76, seo 77, aeo 86, geo 66
# flags: internal_linking, slop
curl https://api.dokeo.co/api/v1/scan \
-H "Authorization: Bearer $DOKEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "...", "content_type": "blog"}'{
"mcpServers": {
"dokeo": {
"command": "dokeo-mcp-server",
"env": { "DOKEO_API_KEY": "your-api-key" }
}
}
}pip install dokeo dokeo scan --file post.md --content-type blog
| Overall | 76 |
| SEO | 77 |
| AEO | 86 |
| GEO | 66 |
fail_on: fail, so the check passes with a warning.scan_contentscan_urlbatch_scanget_issuessuggest_fixeslist_content_typesMCP docsAction docsThe claims on this page are the ones the security page already publishes. The longer write-up is there.
Scoring is deterministic code. There is no model in that path, so a repeat of this post returns the same Warning and the same 76.
TLS (HTTPS) in transit via Vercel, Modal and Supabase. Data at rest is encrypted by those hosts. Stored credentials are also encrypted by Dokeo with Fernet (AES-128-CBC with HMAC). API keys are stored only as SHA-256 hashes and checked in constant time. Pixel tokens and webhooks are HMAC-signed. User-supplied URLs are SSRF-guarded before a fetch.
Row-level security is on for every Dokeo table, and a test fails if a table ships without it.
Single region, US. EU residency is not live, so this page does not claim it.
No SOC 2 report yet. Questions go to os@dokeo.co. Paid plans are available for Growth, Pro, and Scale. Payments are handled by Paddle, the merchant of record.
Read the security pageUS dollars, the same tier table as the pricing page. Growth, Pro, and Scale are available to buy. Every plan runs the same checks; the tiers differ by volume and seats.
100 / mo. 1 user.
Start free2,500 interactive + 12,500 CI / mo. 5 users.
See Growth10,000 interactive + 50,000 CI / mo. 10 users.
See Pro30,000 interactive + 170,000 CI / mo. Unlimited.
See Scale100,000+ / mo. Unlimited.
See what is includedAnnual billing is lower: Growth $63. Pro $223. Scale from $399. Paid plans are available for Growth, Pro, and Scale. Payments are handled by Paddle, the merchant of record.
Compare plansContent is live today: 19 core checks across SEO, AEO and GEO. The same gate is built to work as a layer for other tools and agents, and the catalog already lists 44 checks for CRM, sales, GTM, marketing, RevOps, enrichment and pipeline. Those are on the roadmap. The data adapters are not connected yet.
Read the visionScan a draft in the browser. Or book a walkthrough of the gate on a real workflow.
internal_linkingNo contextual links found (internal or external)slopquestion-then-answer pattern found 2 time(s)