Bulk-generate optimised title tags, meta descriptions, and OG tags for a list of pages from a CSV. Powered by Claude Haiku. Built as an Abacus.ai ChatLLM agent tool and a standalone Python CLI.
Companion to exec-meta-eval — generates the meta, then scores it so you know quality before publishing.
For each row in your input CSV (url, keyword):
- Fetches the live page to extract existing content for context
- Generates optimised meta via Claude Haiku:
- Title tag (50–60 chars, keyword near front)
- Meta description (145–160 chars, keyword + value hook + CTA)
- OG title (benefit-led, ≤70 chars)
- OG description (outcome-focused, ≤200 chars)
- Scores the generated meta with the exec-meta-eval 9-dimension rubric (0–100)
- Returns a CSV ready to paste into your CMS or bulk-upload sheet
Minimum required columns:
url,keyword
https://example.com/solutions,AI-led business transformation
https://example.com/insurance,insurance claims automationOptional columns for better output:
url,keyword,page_type,audience
https://example.com/solutions,AI transformation,Landing Page,CMO
https://example.com/case-study,claims automation ROI,Case Study,CFO| Column | Values |
|---|---|
page_type |
Home, Landing Page, Product/Solution, Case Study, Blog |
audience |
CMO, CTO, CFO, VP Operations, etc. (defaults to "B2B senior decision-maker") |
| Column | Description |
|---|---|
url |
Input URL |
keyword |
Input keyword |
title |
Generated title tag |
title_len |
Character count |
meta_desc |
Generated meta description |
meta_desc_len |
Character count |
og_title |
Generated OG title |
og_desc |
Generated OG description |
reasoning |
Why this keyword placement and CXO hook was chosen |
eval_score |
exec-meta-eval score (0–100) |
eval_grade |
A / B / C / D / F |
top_fix |
Single highest-impact improvement if score < 70 |
error |
Error message if fetch or generation failed |
- Upload
agent_tool.pyas a code tool in your Abacus.ai ChatLLM agent - Set
ANTHROPIC_API_KEYin the agent's environment variables - Copy the system prompt from
agent_instructions.mdinto the agent instructions - Connect
generate_meta_bulkas the callable function
See agent_instructions.md for the full setup guide and example interaction.
pip install httpx
export ANTHROPIC_API_KEY=sk-ant-...
python agent_tool.py input.csv output.csvfrom agent_tool import generate_meta_bulk
csv_text = """url,keyword,page_type,audience
https://example.com/solutions,AI transformation,Landing Page,CMO
https://example.com/insurance,claims automation,Product,CFO"""
result_csv = generate_meta_bulk(
csv_input=csv_text,
api_key="sk-ant-...",
fetch_pages=True,
include_eval=True,
)
print(result_csv)Each row makes 2 Claude Haiku calls (generate + eval) + 1 HTTP fetch. Haiku pricing at time of writing: ~$0.25 / 1M input tokens, ~$1.25 / 1M output tokens.
| Rows | Approx. cost | Approx. time |
|---|---|---|
| 10 | ~$0.01 | ~30s |
| 100 | ~$0.10 | ~3–4 min |
| 500 | ~$0.50 | ~15–20 min |
(With fetch_pages=False and include_eval=False, cost and time drop by ~60%.)
exec-meta-gen/
├── agent_tool.py # Core Python tool + CLI entry point
├── agent_instructions.md # Abacus.ai ChatLLM system prompt + setup guide
├── requirements.txt
└── README.md
- exec-meta-eval — evaluate existing meta
- content-eval — evaluate long-form content
Built by RYVR Immersive.