← playbookhome →

Deeper · 01.A

Semrush at scale.

One Semrush account allows ~10 searches a day before friction. bord runs 10 logged-in profiles in parallel through AdsPower. That gets to 70+ searches a day, all headless, all logged.

01

The 10-profile rotation

Semrush throttles aggressive querying. The workaround is a profile rotation: 10 separate Semrush accounts, each in its own AdsPower browser profile. Each profile runs Playwright headless via the AdsPower CDP endpoint. Each session is throttled to ~7 searches before rotating to the next profile. State is persisted to disk so cookies, fingerprints and history survive.

Never run two browser profiles in parallel. Sequential rotation only — fingerprint collisions get accounts flagged.
02

The journey explorer

bord-apps/semrush-search runs a daemon called the journey explorer. It walks a queue: city × vertical × language. For each row it pulls volume, KD, CPC, intent, and writes to a journal. The dashboard at localhost:4000/semrush-search shows the live state of the queue, which profile is in use, and how many searches are left in the daily budget.

03

The pipeline, step by step

  1. 01
    Pick a country (.ch first, .com Bali second)
    Country logic is set elsewhere. The semrush daemon picks the active country.
  2. 02
    Pull a vertical from the seed list
    Plumbing, dentist, electrician, locksmith, surf school, scooter rental, cleaning, moving, photographer, escape room, etc.
  3. 03
    Combine vertical × city
    Geneva, Lausanne, Zurich, Basel for .ch. Canggu, Ubud, Seminyak for Bali. Spit out the literal Google query.
  4. 04
    Headless Semrush search
    Read volume, KD, CPC, intent. Write to JSON.
  5. 05
    Filter on the four numbers
    volume ≥ 300, KD < 30, CPC ≥ $2, intent commercial. Anything failing is killed and the row is marked dead.
  6. 06
    Surviving rows go to OpenProvider check
    A second daemon checks domain availability. Both must be true to move on.
  7. 07
    Final list goes to the audit sheet
    Google Sheet `audit` tab is the source of truth. Every row has the Semrush data, the domain price, and a Buy/No verdict.
04

Why this matters

Most SEO outfits guess. bord doesn't guess. Every market has numbers attached before any code runs. That's why the conversion from launched site to first-page ranking is so high — the keywords were screened to be winnable.