ZensInk
SEO Toolkit for Indie Builders
CLI tools for keyword research, competitor analysis, and technical audits. Zero dependencies, pure Python.
Twenty CLI tools that cover the full SEO workflow — from discovering what people search, to clustering keywords by topic, to classifying search intent, to auditing your own site. No paid APIs. No Ahrefs. No subscriptions. Just free data sources wired together with Python.
| Tool | What it does | API needed |
|---|---|---|
keyword_research |
Discover long-tail keywords via Google Autocomplete | None |
keyword_cluster |
Group keywords into semantic topic clusters | None |
kd |
Keyword difficulty score via SERP structure analysis | Free Serper key |
kgr_auto |
KGR opportunity scoring (competition vs volume) | Optional Bing key |
keyword_volume |
Real search volume via Bing Webmaster API | Free Bing key |
brave_volume |
Cross-check search demand via Brave SERP signals | Free Brave key |
domain_rating |
Real Ahrefs Domain Rating (0-100) via the free public API | Free Ahrefs key |
search_intent |
Classify keywords by search intent (info/commercial/transactional) | None |
content_matrix |
Prioritized content opportunity matrix | None |
competitor_gap |
Compare multiple competitor sitemaps, find content gaps | None |
site_audit |
Technical SEO + GEO audit: 30 checks covering links, meta, images, structured data, AI visibility | None |
serp_intent |
SERP-based intent analysis — reverse-engineer Google's actual ranking behavior | Free Serper key |
onpage_audit |
On-page quality scoring (7 dimensions, 0-100 per page) | None |
geo_fanout |
Query Fan-out content planning (GEO/AI search) | None |
reddit_blueocean |
Reddit blue-ocean keyword mining via Autocomplete | None |
content_qc |
Pre-publish gate for AI-citable content (14 weighted checks) | None |
llms_gen |
Generate llms.txt + llms-full.txt from a build dir or sitemap |
None |
ai_crawler_audit |
robots.txt AI-crawler policy + llms.txt layer audit, AI-readiness score | None |
rank_tracker |
SQLite-backed keyword position history | Free Serper key |
setup_gsc |
One-time OAuth setup for Google Search Console | — |
search_performance |
Your site's real Google ranking data (GSC) | Free GSC OAuth |
Why
Ahrefs costs $200/month. SEMrush costs $130/month. For indie builders who just need to find keywords worth writing about, that's overkill.
zens.ink wires together free public data sources — Google Autocomplete, Bing Webmaster Tools, Google Search Console, Brave Search, Ahrefs Domain Rating — with zero Python dependencies.
Install
Option A — pip (recommended)
pip install zens-ink
After install, the zens-ink command is available globally:
zens-ink --help
Option B — git clone
git clone https://github.com/ZensInk/zens-ink-seo-package.git
cd zens-ink-seo-package
Quick Start
# Discover keywords (with a-z long-tail expansion)
zens-ink keyword_research "tarot" --expand
# Check real search volume
zens-ink keyword_volume "tarot reading" --country us
# Keyword difficulty (SERP-based, with Chinese mode)
zens-ink kd "塔罗牌" --zh
# Compare 3 competitors at once
zens-ink competitor_gap \
--url https://yoursite.com/sitemap.xml \
--compare https://competitor-a.com/sitemap.xml https://competitor-b.com/sitemap.xml
# Audit your build for SEO issues
zens-ink site_audit --dist dist --sitemap dist/sitemap.xml
# Check your own Google search performance
zens-ink search_performance
Not installed? Use python3 -m instead
python3 -m zens_ink.keyword_research "tarot" --expand
python3 -m zens_ink.kd "tarot reading"
python3 -m zens_ink.site_audit --dist dist --sitemap dist/sitemap.xml
Use as Agent Skill
ZensInk works as an AI agent skill — let your AI assistant run SEO tools for you in plain language.
# Install for ClawHub / OpenClaw / Hermes compatible agents
npx skills add ZensInk/zens-ink-seo-package --skill zens-ink
Then just tell your AI: "find keywords for my tarot site" and it runs the tools for you. See SKILL.md for details.
Use as MCP Server (DSH / Claude / Codex)
ZensInk ships a built-in MCP stdio server — every tool becomes a native model tool (mcp__zensink__keyword_research, mcp__zensink__kd, ...). Pure stdlib, zero extra dependencies.
python3 -m zens_ink.mcp # MCP stdio server on stdin/stdout
Add to DeepSeek Harness (DSH) — ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: mcp-zensink
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: zensink
transport: stdio
command: python3
args: ['-m', 'zens_ink.mcp']
toolCallTimeoutMs: 300000
For other MCP clients (Claude Desktop, Codex, ...), point the stdio command at python3 -m zens_ink.mcp. API keys are read from the package root .env as usual.
If the Pro package (zens_ink_pro) is installed alongside, its tools (winability, content_radar, competitor_radar, geo_score, geo_visibility, gap_deep, full_audit) are picked up automatically — the same server exposes everything available on that machine. OSS-only installs stay OSS-only.
Typical Workflow
keyword_research → find what people actually search
↓
keyword_volume → filter by real demand
↓
kd → pick keywords you can actually rank for
↓
competitor_gap → see what competitors already cover
↓
site_audit → make sure your pages are crawlable
Requirements
- Python 3.10+
- Zero dependencies — pure standard library
- Optional API keys (Bing, Serper, Brave, GSC) in
.env— see.env.example
Documentation
-
Changelog: CHANGELOG.md
-
Full docs & case studies: zens.ink/docs
-
Pro package (automated full-audit pipeline, HTML reports, GEO score): zens.ink
License
MIT — free for personal and commercial use.
Made by Jask
Metadata
Release files for zens-ink 1.4.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zens_ink-1.4.8.tar.gz | 97.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zens_ink-1.4.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 207.0 kB
Release files / zens_ink-1.4.8.tar.gz
| Download URL | zens_ink-1.4.8.tar.gz |
|---|---|
| Size | 97.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ce42765c338489bebe872749813554e27e97ef6b1cd2d9854c8dfe61e18b0564
|
|
BLAKE2b-256 checksum How to use checksums |
ab57de4653c8e5f5ee5103223cf055797dc0b0448882a85a5ca22cb02bfb89d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / zens_ink-1.4.8-py3-none-any.whl
| Download URL | zens_ink-1.4.8-py3-none-any.whl |
|---|---|
| Size | 109.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8aedc8f68c292b6e4d0421e6843f49447a056e3aa90a8497fdcdb43b3083b82c
|
|
BLAKE2b-256 checksum How to use checksums |
5b584d89690f872ecf1dbb871c78d7a96d9c3c2879e96faa3d5bf1d3c81f6241
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|