FA
Faisal
Admin
Notifications0 new

Overview

🌐 All Sites
Active Sites
Total Organic
Pending Approvals
Avg Health
/100
All Sites SEO / AEO / GEO / GMB
SiteHealthSEOAEOGEOGMBStatusTraffic
Loading…
⚡ Needs Attention
Loading…
✦ AI Advisor
Loading…

Strategy

🌐 All Sites
Each website has its own strategy — pick a site from the top dropdown, change the settings, then Save.
Keywords & Content
Keywords / monthleave empty for AI best-practice
New content / weekdefault 3
Content refresh / monthprevent decay
GMB posts / week2-3 max (avoid spam)
Automation & Approval
Auto-post after 72hauto if no one acts
Meta / schemaapprove mode
Content publishapprove mode
LLM source (heavy)free / paid
Priority Pages
Loading…
GMB Settings
Auto post
Review replydefault approve (risky)
API status
Pending Google approval

Summary

🌐 All Sites
✦ Analyze any page — on-demand
Paste any page URL — it's fetched and scored live, then you can turn the issues into approval tasks.
📈 Search rankings — live from Google Search Console
QueryPositionChangeClicksImpressionsCTR
Loading…
Page Status
PagePosScoreState
Loading…
GMB Status
Loading…

Approve

🌐 All Sites
Loading…

Keywords

🌐 All Sites
KeywordTarget URLTypeTailVolKDIntentStatus

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 Sites
Manual — find prospects on ChatGPT, add here, drag through stages, rate ★1–5. Live backlinks auto-verified via GSC.
Prospect0
Contacted0
Agreed0
Live ✓0

Directory Submissions

🌐 All Sites
How this works — honestly. Almost every directory has a captcha, a login, or a human review, so there is no API to submit for you. What the agent does do: keep the list, prefill every field from the client profile so you paste instead of type, and track each listing from To do → Submitted → Live. Anything claiming full auto-submission here would just fail silently.
To do0
Submitted0
Live ✓0
Rejected0

Reports

🌐 All Sites
✉ Reports send themselves. On the 1st–5th of each month the agent emails every active client a private, read-only link to last month's report — no login, no PDF attachment, no double-sends. Turn it off per client in Onboard → Monthly report email.
Generated reports history
Client / SitePeriodTrafficHealthDelivery
Loading…
Report header = white-label brand (default Hello To Marketing) + client company/website. Data from GSC + verified task log.

Credentials

🔒 Admin only · encrypted
🔒 Encrypted vault. All secrets (ID, email, password, API key, OAuth token…) AES-encrypted in D1. Master key in server env, never in DB. Admin only.
Loading…
One Google account can hold 4–5 clients. Add new client → connect new Google or reuse existing.

Activity Log

immutable · append-only
Audit trail. Every user action logged with exact date & time. Viewable by all team, cannot be deleted by anyone.
UserActionSiteTargetDate & time
Loading…

Onboard New Client

everything the AI needs to run SEO on its own
1 · Business info the AI writes every article from this
Company namegoes on the report header
Websiterequired — you can save with just this
Contact personwho we talk to
Email
Phone
Addressstreet / city — used for directory listings
Industry / nichee.g. law firm, dental clinic, SaaS
Service areawhere SEO should rank — city, country, or “global”
Target audiencewho they sell to
Competitorscomma-separated domains
Brand tonehow articles should sound
Special noteanything to remember
What does the business do?2–3 sentences in the client's own words. This becomes the “About” section of every article — it is the E-E-A-T signal a generic page can never have.
Monthly report emailwhere the automatic report goes — defaults to the contact email
Only the website is required — finish the rest later.
2 · Technical setup data in, content out
📊 To pull this site's rank & traffic (Google Search Console):
Ask 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.
Search Console propertythe source of every keyword and ranking — without it the AI has nothing to research from
·
1 · Connect GSCrank & traffic (primary)
checking…
2
2 · GA4 propertyorganic analytics — optional
Optional
3
3 · Bing Webmasterfree GSC fallback — optional
Optional
4
4 · GMB accessGoogle Business Profile
⏳ Pending Google approval
5
5 · CMS publishauto-detect or pick
6
6 · Content enginein-house scorer + generator (free) · Gemini optional
Ready
Articles per weekthe AI drafts up to this many, then stops
Auto-publish after 72hif nobody reviews a draft in 72 hours, the AI approves and publishes it. Uncheck to require a human every time.
Save a client, then start.

Audit

any URL · instant SEO report

Fetches 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
CompanyWebsiteEmailPhoneStatusOnboardedStart → End

Company · website · location · email · phone · Active/Inactive status (change from the dropdown) · onboarded date · estimated timeline · special note.

Team & Roles

🔒 Admin only
Team members
NameEmailRoleStatusAccessSites
Custom roles
Presets: Admin (all) · Editor (work, no settings/secrets) · Viewer (read-only). Create custom roles with exactly the access you choose. Invited users get an email link to accept (email delivery wires in M6).

User Manual

how the SEO Agent works — chapter by chapter

1 · 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)

  1. Pull data — fresh rankings, clicks and impressions from Google Search Console.
  2. Scan — detect ranking decay, quick-win keywords (position 11–20), traffic anomalies and cannibalisation, and raise alerts.
  3. 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).
  4. Publish — any draft nobody reviewed within 72 hours is auto-approved and pushed live to the site's CMS.
  5. Report — on the 1st–5th of each month, every client is emailed a private link to their monthly report.
What "active" means: a client only enters this loop after you press Start SEO. Before that, nothing is drafted or published.

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.
  1. Fill Part 1, press 💾 Save client.
  2. Complete Part 2 (GSC + CMS).
  3. Press 🚀 Start SEO. The client goes active and the daily loop takes over from the next run.
Start SEO is the on-switch. It creates the site's strategy (quota + autopilot). Until you press it, the agent ignores this client entirely.

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)

  1. Ask the client to open search.google.com/search-console.
  2. Go to Settings → Users and permissions → Add user.
  3. Paste hello@hellotomarketing.com and 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)

  1. In Onboard, open the Search Console property dropdown.
  2. Pick the client's domain from the list, then Save.
  3. The next daily sync (or a manual Sync) pulls the data in.
Human touch: only Step A — you cannot add yourself to someone else's Search Console; the client has to invite our email.
New property? A brand-new GSC property has no history, so it shows 0 rows for 1–3 days. That is normal — data starts arriving once Google has crawled and the client has traffic.

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

  1. Log in to the site's WordPress admin (yoursite.com/wp-admin).
  2. Go to Users → Profile (or Users → your user → Edit).
  3. Scroll to Application Passwords, type a name like seo-agent, press Add New Application Password.
  4. 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.

Don't see Application Passwords? Needs WordPress 5.6+ over HTTPS. Some hosts hide it — the free "Application Passwords" plugin re-enables it. It is not your normal login password.

2 · Shopify — Admin API access token

  1. Shopify admin → Settings → Apps and sales channels → Develop apps.
  2. Allow custom app development if asked, then Create an app — name it seo-agent.
  3. Tab Configuration → Admin API integration → Configure: tick write_content and read_content (that's blog articles), Save.
  4. 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.

  1. Set the site's CMS to Wix (or Manual) — the agent still writes and scores articles.
  2. Drafts wait in Approve. Open 👁 View draft and copy the article.
  3. In Wix: Blog → Create Post, paste, publish.
On Wix Studio / Headless? That version does have an API. Generate an API key in Wix Studio and use the Webhook option (see #10) with your endpoint.

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:

  1. Set CMS to Squarespace (or Manual).
  2. From Approve → 👁 View draft, copy the article.
  3. Squarespace: Pages → Blog → +, paste, publish.

5 · Webflow — API token + Site ID

  1. Log in to Webflow → Workspace / Site settings → Apps & integrations.
  2. Under API access press Generate API token, give it CMS read & write, copy it.
  3. 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.

Note: the article publishes into a Webflow CMS Collection (e.g. "Blog Posts"). The collection must already exist on the site.

6 · Joomla — API token

  1. Joomla admin → System → Plugins: enable API Authentication - Web Services Joomla Token and Web Services - Content.
  2. 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

  1. Enable the core JSON:API module (Extend), and set it to accept writes.
  2. 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

  1. Magento admin → System → Extensions → Integrations → Add New Integration.
  2. Name it seo-agent; under API grant access to Content / CMS resources.
  3. 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.

  1. GitHub → profile picture → Settings → Developer settings.
  2. Personal access tokens → Fine-grained tokens → Generate new token.
  3. Name seo-agent, set an expiry; Repository access → Only select repositories → the site's repo.
  4. Repository permissions → Contents → Read and write (this is the one that matters).
  5. 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.

Where do posts land? The agent commits to 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.

  1. Drafts collect in Approve.
  2. Press 👁 View draft and copy the full article (title, meta, body — all ready).
  3. 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.
Human touch: generating the token/password is a one-time manual step (you or the client). Once saved, publishing is fully automatic for platforms with an API (WordPress, Shopify, Webflow, Joomla, Drupal, Magento, Git, Webhook). Wix, Squarespace and Manual stay copy-paste — no platform lets us change that.
CMSAuto-publish?What you paste
WordPress✅ YesURL · user · app-password
Shopify✅ Yesstore · API token · blog ID
Webflow✅ YesAPI token · site ID
Joomla✅ YesURL · API token
Drupal✅ YesURL · user · API key
Magento✅ Yesbase 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.
No paid API needed. The generator and scorer run in-house for free. A higher-quality LLM generator can be swapped in later without changing anything else.

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.

Human touch (optional): reviewing drafts. Leave it fully automatic, or keep a human in the loop — your choice, per client.
No CMS credentials = no publish. If a site has no credentials saved, approved drafts stay in the queue instead of going live. The app tells you when this happens.

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

  1. Open 📋 List all and press ✉ Send on a prospect.
  2. The AI drafts a pitch from the client profile. Edit it, then Send now (or Copy to send elsewhere).
  3. The prospect moves to Contacted. Follow-ups are capped at 3 touches.
Why one at a time? Bulk cold email from a transactional domain destroys its reputation. Reviewed, one-by-one sending keeps deliverability healthy. A dedicated cold-email tool (e.g. Reachinbox) is only worth it above ~100 emails/day.
Human touch: finding prospects and reviewing each pitch before it sends.

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.
Human touch: the actual submission (paste + solve captcha). This is semi-automatic by necessity — anything claiming full auto-submission here would just fail silently.

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.
Needs an email key. Sending uses Resend. If 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.

SettingWhat it does
Content per weekHow many articles the AI drafts per site each week, then stops.
Auto-publish after 72hOn = unreviewed drafts publish themselves; off = human approval required.
Refresh / GMB cadenceHow often existing pages are refreshed and GMB posts scheduled.
Approval modePer-item, bulk, or fully automatic — per content type.
Rule of thumb: new client, want oversight → autopilot off, review the first few weeks. Confident → autopilot on, check in weekly.

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)

  1. Search Console access — the client invites our email to their GSC (Chapter 3). Can't be automated.
  2. CMS credentials — generate and save the app-password/token once (Chapter 4). After this, publishing is automatic.
  3. 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

SymptomLikely cause
No drafts appearingClient not active (press Start SEO), or GSC has no data yet (new property, 1–3 days).
Drafts stuck in Approve, never go liveNo CMS credentials saved, or autopilot is off.
"Auto-publish failed" messageWrong CMS token/permission — re-check the token has write/Contents access.
Report email not sendingRESEND_API_KEY not set — use the shareable link instead.
GSC shows 0 rowsProperty just added; wait for the next sync, or the client hasn't granted access yet.