A Daily Link-Prospecting Routine for Taste Boulder
Private deliverable. Enter the hub password to continue.
That's not right. Try again.
A Daily Link-Prospecting Routine for Taste Boulder
August 3, 2026 · Plan plus the architecture decision
First, the thing I have to tell you before anything else
You asked for a job that finds whoever links to bouldercoloradousa.com and the other high-authority Colorado sites, and goes after those links. I ran exactly that query. Here is what it returns.
I asked DataForSEO for every domain that links to all five of your competitors (bouldercoloradousa.com, boulderdowntown.com, travelboulder.com, aboutboulder.com, yourboulder.com) but does not link to you. That's the textbook "link gap" report, and it's precisely the list a daily bot would work from. It came back with 40 domains. Here's a sample:
eliterankdirectory.com · seodirectorypro.com · fastrankdirectory.com · powerlinkdirectory.com · worldseodirectory.com · backlinkboostdirectory.com · topsiterankdirectory.com · authorityprodirectory.com · traffichubdirectory.com · linkboostdirectory.com · ahrefs-links.com · siteprice.org · getwebsiteworth.com · seomuda.id · torun-stolarz.pl · mydeepin.ru · read.org.in
Of the 40, exactly one is a link you'd actually want: colorado.edu. The rest are spam directories, auto-generated "what is this website worth" scrapers, and offshore link farms.
That isn't a flaw in the query. It's what the link gap between established sites looks like. Sites that have been around for fifteen years accumulate thousands of junk links passively, and those junk links are exactly the ones that appear on every competitor at once, because scrapers hit every site in a category. The genuinely good links (the city government, the local newsroom, the festival) are not shared across all five competitors, so an intersection query filters them out and keeps the garbage.
Now put that next to what Google's spam policy actually says. Under "Link spam", the listed examples include:
"Using automated programs or services to create links to your site"
and
"Exchanging money for links, or posts that contain links."
So a daily bot that mines a link-gap list and pursues those links would spend most of its effort building precisely the link profile that gets a new site suppressed. Your site currently has 12 referring domains with a backlink spam score of 46, all nofollow, all from that same class of scraper. You do not need more of those. You need roughly 100 real ones.
I'm not refusing the job. I'm changing what the job does: automate the research and the drafting, never the outreach, and filter hard for real local publishers. That version is genuinely valuable and I've specified it below.
The architecture answer: routines, not April
Use a Claude Code cloud routine. Not April. Here's the reasoning, with what I checked.
What Claude Code routines are, as of today
Straight from the routines documentation:
- A routine is a saved Claude Code configuration (a prompt, repositories, connectors) that runs on Anthropic-managed cloud infrastructure, so it keeps working when your laptop is closed.
- Triggers can be scheduled (hourly, daily, weekdays, weekly), API (HTTP POST with a bearer token), or GitHub events. The minimum interval is one hour.
- Runs are full autonomous Claude Code sessions: shell commands, skills committed to the cloned repo, and any MCP connectors you attach. That matters here, because it means the routine can use the DataForSEO connector you already have.
- It clones your repos and pushes to branches prefixed
claude/, which are always accepted. - Available on Pro, Max, Team and Enterprise with Claude Code on the web enabled. Create at
claude.ai/code/routines or with
/schedulein the CLI.
One honest caveat: the docs state routines are in research preview, and that "behavior, limits, and the API surface may change." So don't build anything you can't afford to have wobble. A daily research job is exactly the right risk level for that.
Why not April
I checked her actual track record rather than assuming, and this is the part that decided it.
April is alive: 185 commits to MyExecAssistant since July 25. But every single one of them
is April: mirror N outgoing message(s) to telegram-log. That's Telegram bookkeeping, not task
execution.
The unattended instruction runner, the standing job at
_april/inbox/2026-07-30-standing-drain-inbox-raw.md, is still sitting at status: open. Her
_april/outbox/ has produced nothing since July 30. Your own ROUTINES.md says it plainly:
"Not yet verified end to end. April has never run this job."
That was written on July 30 and it's still true on August 3. April has never once executed an unattended instruction. There's also a known gap in the same file: April cannot see the email door, only Telegram-sourced items.
So the choice isn't "April versus routines" on features. It's "a proven cloud executor versus one that has never completed this class of work." Put the link job on routines. If you want April to eventually own it, fine, but prove her on something you don't care about first.
The honest case for April
Two things April genuinely has that routines don't: no daily run cap, and a VPS you control outright with no research-preview caveat. If this job later needs to run many times a day, or hold long-lived state across runs, revisit it. For once a day, routines win comfortably.
There is a third option, and it's worth knowing about
Claude Managed Agents scheduled deployments run an agent on a real POSIX cron expression with a timezone, up to 1,000 deployments per organization. That's the heavier, API-billed, build-it-yourself path. It's the right answer if this ever becomes a product feature inside SEO Believer that runs for clients. It's overkill for one site. Note it and move on.
The routine
What it does, once a day
It never sends anything. It researches, verifies, drafts, and queues. You approve. That single constraint is what keeps this on the right side of the spam policy, and it matches your standing rule that anything going to a human needs your yes on the exact text.
Step 1: Pull candidates. Query DataForSEO for referring domains of a rotating target from the seed list (below), filtered at the source:
backlinks_spam_score < 20- domain rank above 50
- not already in
data/link-prospects.db - not on the permanent blocklist
Step 2: Kill the junk. Reject any domain matching the spam-directory signature, which is the filter that makes this whole thing work:
- Domain name contains
directory,rank,backlink,seo,listing,submit,webworth,siteprice - Non-US TLD with no Colorado connection (
.ru,.in,.id,.pl,.party,.fyi) - The referring page is a bare list of outbound links with no editorial text
- Anything offering a link in exchange for money, goods, or a reciprocal link. Automatic reject, no exceptions, no human review needed.
Step 3: Classify what survives into the four buckets that actually earn links for a local directory:
| Bucket | What it is | Example from the real data |
|---|---|---|
| Civic and institutional | City, county, university, state | bouldercolorado.gov, colorado.edu, colorado.com |
| Local newsroom | Reporters who cover Boulder food | boulderreportinglab.org, boulderbeat.com, denvergazette.com |
| Events and festivals | Annual things with a links page | boulderburgundyfestival.com, openstudiosboulder.org, etown.org |
| Local business and lodging | Hotels, venues listing "where to eat" | a-lodge.com, bouldercounty365.com, whatshappenin.co |
Step 4: Find the actual page and the actual angle. For each survivor, fetch the specific page that links to the competitor, and answer one question: what would make this page's editor want to link to Taste Boulder instead of, or as well as, the incumbent? If the routine cannot answer that in one concrete sentence, it drops the prospect. No angle, no pitch.
Step 5: Draft, don't send. Write a short, specific, non-templated outreach note naming the
exact page and the exact reason. Commit everything to a claude/link-prospects-YYYY-MM-DD
branch as a markdown queue file.
Step 6: Report. One summary: how many pulled, how many killed by the filter, how many survived, and the top three drafts. That's what you read over coffee.
The seed list, rotating one per day
Rotating means the routine goes deep on one target rather than skimming all of them, and you get a fresh angle daily instead of the same list re-sorted.
- bouldercoloradousa.com (Visit Boulder)
- boulderdowntown.com (Downtown Boulder Partnership)
- denver.eater.com
- boulderweekly.com
- dailycamera.com
- 5280.com
- westword.com
- travelboulder.com, aboutboulder.com, yourboulder.com (the beatable tier, batched)
What it must never do
- Never send an email, form submission, DM, or comment. Draft only.
- Never submit to a directory that exists to sell links.
- Never offer money, free meals, gift cards, or a reciprocal link. If a prospect asks, it stops and flags it for you.
- Never submit the site to Google, Bing or IndexNow. That stays your separate decision.
- Never push to
main.claude/branches only.
Setup
Create it at claude.ai/code/routines, or run /schedule in
the CLI from the TasteBoulder repo. Configuration:
- Repository: TasteBoulder
- Connectors: DataForSEO (required), Gmail (read only, and only if you want it to spot replies, it must still never send)
- Schedule: daily, early morning your time
- Prompt: points at a committed skill file,
.claude/skills/link-prospect/SKILL.md, so the logic lives in git and is reviewable, rather than being buried in a web form
Because skills committed to the cloned repo are available to the run, the whole filter lives in version control where you can read it and change it. That's the part that makes this maintainable.
Register it
Per your standing rule, this goes in ~/memory/ROUTINES.md at creation: what it is, when it
fires, that the trigger lives in your claude.ai account, how to pause it (the Repeats toggle),
and its status.
What "good" looks like
Revised after Annette pointed out her Bone Voyage track record, and she's right to push.
I originally wrote that reaching ~100 referring domains would be a long campaign. That framing was too cautious, and it was calibrated to a generic new site rather than to the person doing the work.
What I can verify: bonevoyagedogrescue.com today shows 198 referring main domains (136 of them followed) at domain rank 188, with 310 of its 490 backlinks now broken. That last number is the important one. It means a substantially larger set of links existed and has since decayed, which is normal: press mentions get unpublished, directories churn, sites die. Third party crawlers only count what's live today, and Search Console counts far more generously than any of them, so a 1,000+ figure from GSC and a 198 figure from DataForSEO can both be true statements about the same site.
Either way the strategic point stands and I'll take it: you have personally built a referring domain profile roughly twice the size of the one that currently wins the "best restaurants in boulder" cluster. blondeatlas.com ranks #1 to #3 on about 109 real followed domains. You have already cleared that bar once, on a project with no SEO budget.
So the target isn't 100 links eventually. The target is 100 links fast, and then past it. The plan changes accordingly:
- The routine should surface 15 to 25 qualified prospects a day, not three. You will work through a queue faster than a cautious one can fill it.
- Batch the outreach drafts by bucket so you can send a themed run in one sitting rather than one note at a time.
- Assume the constraint is your calendar, not the prospect supply.
One real difference worth naming, because it changes which assets work. A dog rescue earns links through rescue narratives, adopter blogs, pet charity directories and shareable animal stories. A restaurant directory does not have that emotional engine. It earns links through being the reference other people cite. That's a different playbook, not a smaller one, and you already own the two assets that do it:
- The closed-restaurant dataset. 107 confirmed closures with dates, and press-verifiable. TripAdvisor still lists Boulder restaurants that shut in 2021. Nobody else in this city can publish an accurate "what closed and when" record, and local journalists need exactly that.
- The menu price index. Every menu in Boulder, priced. That's an original dataset, which is the single most linkable thing a directory can have. "The average burrito in Boulder costs $11.99, here is the range" is a story the Daily Camera, BizWest and Boulder Reporting Lab will all take.
And the four best links need no automation at all. Get listed on Visit Boulder and Downtown Boulder, join the Boulder Chamber, and pitch Boulder Reporting Lab or the Daily Camera on the closed-restaurants story. Do those by hand this week. The routine is for volume after that.
Published to Annette's hub. Rebuilt from the source markdown, so edit the source and rerun rather than editing this page.