Overview
🌐 All Sites| Site | Health | SEO | AEO | GEO | GMB | Status | Traffic | |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
Strategy
🌐 All SitesSummary
🌐 All Sites| Query | Position | Change | Clicks | Impressions | CTR |
|---|---|---|---|---|---|
| Loading… | |||||
| Page | Pos | Score | State |
|---|---|---|---|
| Loading… | |||
Approve
🌐 All SitesKeywords
🌐 All Sites| Keyword | Target URL | Type | Tail | Vol | KD | Intent | Status |
|---|
Per-site keyword map. Add/edit inline · New vs Optimize · status Planned → In progress → Live. The content engine (M5) drafts from these.
Guest Post
🌐 All SitesDirectory Submissions
🌐 All SitesReports
🌐 All Sites| Client / Site | Period | Traffic | Health | Delivery | |
|---|---|---|---|---|---|
| Loading… | |||||
Credentials
🔒 Admin only · encryptedActivity Log
immutable · append-only| User | Action | Site | Target | Date & time |
|---|---|---|---|---|
| Loading… | ||||
Onboard New Client
everything the AI needs to run SEO on its ownAsk the client to add hello@hellotomarketing.com as a user in their Search Console — search.google.com/search-console → Settings → Users and permissions → Add user → paste the email → give Full access. Takes 30 seconds, no login needed on their side. Once added, this site's data flows in automatically — then pick it below.
Audit
any URL · instant SEO reportFetches the page and runs the in-house SEO scorer (13 checks) — works on any URL, even sites not onboarded. For the deep 18-agent audit, use Claude Code with the seo skills.
Clients
all clients · status · timeline| Company | Website | Phone | Status | Onboarded | Start → End |
|---|
Company · website · location · email · phone · Active/Inactive status (change from the dropdown) · onboarded date · estimated timeline · special note.
Team & Roles
🔒 Admin only| Name | Role | Status | Access | Sites |
|---|
User Manual
how the SEO Agent works — chapter by chapter1 · How the SEO Agent works
The short version: you onboard a client once, press Start SEO, and the agent runs the day-to-day SEO on its own. You step in only where a human genuinely must.
The daily loop (runs 12:00 PM Bangladesh time, every day)
- Pull data — fresh rankings, clicks and impressions from Google Search Console.
- Scan — detect ranking decay, quick-win keywords (position 11–20), traffic anomalies and cannibalisation, and raise alerts.
- Research + write — for every active client the AI finds keywords from that site's real Search Console queries, then drafts articles up to the weekly quota, using the client's business profile (industry, location, audience).
- Publish — any draft nobody reviewed within 72 hours is auto-approved and pushed live to the site's CMS.
- Report — on the 1st–5th of each month, every client is emailed a private link to their monthly report.
Where a human is needed
Only three things truly need you. Everything else is optional oversight. See Chapter 12 for the full list, but in short:
- Getting the client to grant Search Console access (one-time, on their side).
- Entering the CMS credentials once, so the agent can publish (Chapter 4).
- Optional: reviewing drafts in the Approve queue before the 72-hour timer publishes them.
2 · Onboard a client
Everything the AI needs to run SEO without being briefed by a human. Open Onboard New Client from the sidebar.
Part 1 — Business info (the top half)
This is what every article is written from, so fill it well. Only the website is required; the rest can be added later.
- Industry / niche, Service area (a city, a country, or "global"), Target audience — these localise and target the content.
- What does the business do? — 2–3 sentences in the client's own words. This becomes the "About" section of every article, which is the E-E-A-T signal a generic page can never have.
- Monthly report email — where the automatic report goes (defaults to the contact email). Untick "send it" to opt out.
Part 2 — Technical setup (the bottom half)
- Search Console property — the data source (Chapter 3).
- CMS publish — auto-detect or pick the platform. Chapter 4 has click-by-click steps to get the login/token for all 9 popular CMS + manual — most clients can't find these on their own, so keep that chapter handy.
- Articles per week — how many the AI drafts before it stops.
- Auto-publish after 72h — on = the AI publishes drafts nobody reviewed; off = a human must approve every article.
- Fill Part 1, press 💾 Save client.
- Complete Part 2 (GSC + CMS).
- Press 🚀 Start SEO. The client goes active and the daily loop takes over from the next run.
3 · Connect Google Search Console
GSC is the single source of every keyword and ranking. Without it the AI has nothing to research from, so this is the most important connection.
Step A — the client grants access (on their side)
- Ask the client to open
search.google.com/search-console. - Go to Settings → Users and permissions → Add user.
- Paste
hello@hellotomarketing.comand give it Full access.
That is all they do — 30 seconds, no login needed on their side. Their data then flows into our Google account automatically.
Step B — assign the property (in the app)
- In Onboard, open the Search Console property dropdown.
- Pick the client's domain from the list, then Save.
- The next daily sync (or a manual Sync) pulls the data in.
4 · Connect your CMS (get link + password)
To publish automatically, the agent needs one set of credentials per site — always an app-password or API token, never the client's main login password. Everything is stored encrypted in the vault. Below is how to generate them for each platform.
Jump to your platform: the 9 popular ones plus Manual are below, each with click-by-click steps and exactly what to paste into the connect box.
1 · WordPress — Application Password
- Log in to the site's WordPress admin (
yoursite.com/wp-admin). - Go to Users → Profile (or Users → your user → Edit).
- Scroll to Application Passwords, type a name like
seo-agent, press Add New Application Password. - Copy the password shown once — looks like
abcd EFGH ijkl MNOP(keep the spaces, they're fine).
Paste into the app: Site URL (https://yoursite.com) · Username · that Application Password.
2 · Shopify — Admin API access token
- Shopify admin → Settings → Apps and sales channels → Develop apps.
- Allow custom app development if asked, then Create an app — name it
seo-agent. - Tab Configuration → Admin API integration → Configure: tick
write_contentandread_content(that's blog articles), Save. - Tab API credentials → Install app, then Reveal token once and copy the Admin API access token (
shpat_…).
Paste into the app: Store URL (myshop.myshopify.com) · Admin API token · Blog ID (open Online Store → Blog posts → Manage blogs; the number in that blog's URL).
3 · Wix — no open blog API (Manual)
Standard Wix sites have no public API to publish blog posts, so the agent can't push live to them.
- Set the site's CMS to Wix (or Manual) — the agent still writes and scores articles.
- Drafts wait in Approve. Open 👁 View draft and copy the article.
- In Wix: Blog → Create Post, paste, publish.
4 · Squarespace — no publishing API (Manual)
Squarespace only exposes a commerce/orders API — nothing to create blog posts. So it's copy-paste, same as Wix:
- Set CMS to Squarespace (or Manual).
- From Approve → 👁 View draft, copy the article.
- Squarespace: Pages → Blog → +, paste, publish.
5 · Webflow — API token + Site ID
- Log in to Webflow → Workspace / Site settings → Apps & integrations.
- Under API access press Generate API token, give it CMS read & write, copy it.
- Find the Site ID: same Site settings → General (or it's in the site's URL in the Designer).
Paste into the app: API token · Site ID.
6 · Joomla — API token
- Joomla admin → System → Plugins: enable API Authentication - Web Services Joomla Token and Web Services - Content.
- Go to Users → Manage → open your user → tab Joomla API Token → copy the token.
Paste into the app: Site URL (https://yoursite.com) · API token.
7 · Drupal — API key / JSON:API user
- Enable the core JSON:API module (Extend), and set it to accept writes.
- Create a user (or role) that can create Article content, with Basic Auth enabled — or install a key-auth module and generate a key.
Paste into the app: Site URL · Username · API key (or that user's password).
8 · Magento — Integration access token
- Magento admin → System → Extensions → Integrations → Add New Integration.
- Name it
seo-agent; under API grant access to Content / CMS resources. - Save, then Activate — copy the Access Token it shows.
Paste into the app: Base URL · Access token.
9 · Next.js / React / static site — GitHub token
These build from a Git repo, so the agent commits a markdown file and your host (Vercel / Netlify / Cloudflare Pages) rebuilds and publishes it.
- GitHub → profile picture → Settings → Developer settings.
- Personal access tokens → Fine-grained tokens → Generate new token.
- Name
seo-agent, set an expiry; Repository access → Only select repositories → the site's repo. - Repository permissions → Contents → Read and write (this is the one that matters).
- Generate token, copy
github_pat_…— shown once.
Paste into the app: Git repo URL (owner/repo, or the full https://github.com/owner/repo) · that token.
content/<slug>.md on the main branch. If your site reads a different folder or branch, tell me and I'll add those two fields to the connect box.Manual / HTML / any other — copy & paste
Pick Manual when there's no supported API (or you'd rather review each post by hand). The agent still researches, writes and scores every article — it just doesn't push it live.
- Drafts collect in Approve.
- Press 👁 View draft and copy the full article (title, meta, body — all ready).
- Paste it into the site's own editor and publish.
10 · Webhook — the catch-all for custom stacks
Any platform with its own API: expose an endpoint and the agent will POST each article to it.
- Webhook URL — where we POST the article (JSON: title, html, meta, slug, keyword).
- Secret (optional) — sent as a header so your endpoint can verify the request is from us.
| CMS | Auto-publish? | What you paste |
|---|---|---|
| WordPress | ✅ Yes | URL · user · app-password |
| Shopify | ✅ Yes | store · API token · blog ID |
| Webflow | ✅ Yes | API token · site ID |
| Joomla | ✅ Yes | URL · API token |
| Drupal | ✅ Yes | URL · user · API key |
| Magento | ✅ Yes | base URL · access token |
| Next.js / React / static | ✅ Yes (via Git) | repo · GitHub token |
| Wix | ❌ Manual | — copy-paste (or Webhook if Headless) — |
| Squarespace | ❌ Manual | — copy-paste — |
| Manual / other | ❌ Manual | — copy-paste, or use Webhook — |
5 · Keywords & the content engine
You do not enter keywords. The AI researches them from the site's own Search Console data — that is the whole point of "AI-controlled".
How keyword research works
- It reads the site's real GSC queries (what people already type to find them).
- Queries where the site ranks in positions 11–30 become optimise targets (quick wins); the rest become new content targets.
- Each gets an intent (info / commercial / transactional), a difficulty estimate and a volume proxy from impressions.
You can trigger it any time with 🤖 AI research in the Keywords view, but the daily loop also does it automatically when a site has nothing planned.
How articles are written
- A full, structured HTML article — answer-first block, headings, FAQ + schema, internal/external links, an image with alt text.
- Your business profile is woven in: localised title (e.g. "… in Dhaka"), an "About" section in the client's words, and audience framing.
- An in-house scorer (13 checks) grades it and auto-fixes weak spots until it hits a green score (≥80) before it ever reaches you.
6 · The Approve queue & 72-hour autopilot
This is where you decide how much control to keep. The Approve view lists every draft waiting, with its score and a countdown.
Two ways an article goes live
- You approve it — press Approve and it publishes immediately to the CMS.
- The timer publishes it — if nobody acts within 72 hours and the site's autopilot is on, the agent approves and publishes it for you.
Turning autopilot off
Want a human to approve everything? During onboarding untick Auto-publish after 72h, or change it later in Strategy. With it off, drafts wait in Approve forever until someone acts — nothing publishes on its own.
7 · Guest posts & outreach
Track link-building prospects on a board and send outreach email from inside the app.
The board
Add a prospect (target domain, DA, price, contact email, topic, rating), then drag it through Prospect → Contacted → Agreed → Live. Live backlinks are cross-checked against GSC automatically.
Sending outreach
- Open 📋 List all and press ✉ Send on a prospect.
- The AI drafts a pitch from the client profile. Edit it, then Send now (or Copy to send elsewhere).
- The prospect moves to Contacted. Follow-ups are capped at 3 touches.
8 · Directory submissions
Get the business listed on high-authority directories (Google Business Profile, Clutch, Crunchbase, etc.) for citations and NAP consistency.
How it works — honestly
Almost every directory has a captcha, a login, or a manual review, so there is no API to submit for you. What the agent does instead:
- Keeps the list of 18 seeded directories (plus any you add).
- Prefills every field from the client profile — press ⧉ Prefill and click any field to copy, so you paste instead of type.
- Tracks each listing through To do → Submitted → Live.
9 · Reports & client email
Clients get a clean monthly report automatically — no manual sending.
Automatic monthly email
On the 1st–5th of each month the agent emails every active, opted-in client a private, read-only link to last month's report (KPIs + rankings + what's next). No login, no PDF attachment, and it never double-sends the same period.
On demand
- ✉ Email clients now in Reports — send this month's link immediately to everyone.
- + Create new report — build a report for one site, export PDF, or grab a shareable link.
RESEND_API_KEY isn't set, the app still gives you the shareable link to send yourself.Turn a client's auto-report off in Onboard → Monthly report email (untick "send it").
10 · Strategy & automation settings
Each site has a strategy that controls how hard the agent works and how much it does on its own. Set at Start SEO, editable anytime in Strategy.
| Setting | What it does |
|---|---|
| Content per week | How many articles the AI drafts per site each week, then stops. |
| Auto-publish after 72h | On = unreviewed drafts publish themselves; off = human approval required. |
| Refresh / GMB cadence | How often existing pages are refreshed and GMB posts scheduled. |
| Approval mode | Per-item, bulk, or fully automatic — per content type. |
11 · Team, roles & your account
Roles
- Admin — everything, including team, credentials and billing.
- Editor — day-to-day SEO: clients, content, approve, publish.
- Viewer — read-only.
Invite people from Team & Roles (admin only). They set their own password via the invite email, so you never see or store it.
Your account & password
Open the user menu (top-right, your name) → ⚙ Account & password to change your own email or password. If someone forgets theirs, an admin sends a reset from Team & Roles — nobody can read another person's password.
Signing in
Sign in with Google (SSO) or email + password. Sign out from the same user menu.
12 · Human touch points (the whole list)
The agent is built to run at "0 human touch" once set up. Here is exactly where a person is — or can choose to be — involved.
Must be done by a human (one-time, per client)
- Search Console access — the client invites our email to their GSC (Chapter 3). Can't be automated.
- CMS credentials — generate and save the app-password/token once (Chapter 4). After this, publishing is automatic.
- Press Start SEO — the on-switch that makes the client active.
Optional oversight (you decide per client)
- Reviewing drafts in Approve (or let the 72h timer publish).
- Finding guest-post prospects and reviewing each pitch.
- Submitting directory listings (paste + captcha).
Fully automatic (no human ever)
- Daily GSC sync, keyword research, drafting & scoring, decay/quick-win alerts, publishing via the 72h autopilot, and the monthly client report email.
Troubleshooting quick reference
| Symptom | Likely cause |
|---|---|
| No drafts appearing | Client not active (press Start SEO), or GSC has no data yet (new property, 1–3 days). |
| Drafts stuck in Approve, never go live | No CMS credentials saved, or autopilot is off. |
| "Auto-publish failed" message | Wrong CMS token/permission — re-check the token has write/Contents access. |
| Report email not sending | RESEND_API_KEY not set — use the shareable link instead. |
| GSC shows 0 rows | Property just added; wait for the next sync, or the client hasn't granted access yet. |