What we’re building, and what we’re not
The short version, before any detail.
An internal tool that runs the backlink workflow end to end: find sites worth buying a link from, find who to email, email them, chase the ones who go quiet, collect the rates into one list, put a shortlist to the three of you each month, then keep checking — forever — that the links we paid for are still there.
It buys link insertions only — a link added into an article a site has already published. Guest posts are deliberately out of scope: those need somebody to write an article, which is a whole separate pipeline, and because we’d be the author, the full HCSA advertising rules would land on us rather than on one sentence.
Five brands: slac · slms · tcl · pww · plmc. euph is out of scope for now.
It never touches money. It tracks where an invoice is and stores it. Finance pays, exactly as today.
Steps 1–3 and 7 of Irma’s current workflow — competitor research, filtering on metrics, mapping links to pages — are the easy part. They’re automated here because they’re cheap to automate, not because they hurt.
The four things that actually cost time are: finding email addresses, sending the first email, compiling replies into rates, and chasing non-responders. Everything in this plan is pointed at those four. If we build the rest beautifully and don’t fix those, we’ve wasted the effort.
What changes for Irma
Your ten steps, and who does each one afterwards.
- 01 Keywords and target pages we want to rank for Stays yours. You maintain a Targets tab; the system reads it. It may suggest additions from Rank Tracker — keywords stuck on page 2 where competitors have links we don’t — but never adds them itself. Irma keeps
- 02 Competitor research on Ahrefs Runs nightly off your Targets tab. Competitors → their backlinks → candidate sites. Automated
- 03 Filter on category and industry relevance Automated and upgraded — see section 04. Category alone lets link farms through. Automated
- 04 Find email addresses We crawl the site’s own /contact, /write-for-us and /advertise pages first — free, more accurate than any database, and finding a “write for us” page is the strongest signal they’ll say yes. Only then do we fall back to a paid lookup, and we verify before sending. Automated
- 05 Send outreach emails Sent from one mailbox, as a real conversation. Two follow-ups at +4 and +7 working days, then it goes quiet for 180 days. Any reply stops the chasing immediately. Automated
- 06 Compile into a list, tag to brands The list is the system. A reply quoting a rate gets read, the numbers pulled out with the sentence they came from, and you confirm it in one cell. Automated
- 07 Map links to target pages, decide anchors, finalise costs Proposed for you, not decided for you. We also propose which article on their site the link should go in — see section 05. Anchors are suggested against each brand’s existing anchor spread so the profile stays natural. You override anything. Proposed
- 08 Team alignment and approval A monthly Buy List in the sheet. Clara, Jolene and Vance veto rows with a reason; one sign-off approves the rest. See section 06. Team keeps
- 09 Reply with details, get the invoice for finance The reply is drafted for you. Invoice chasing and finance stay human — but the system holds the invoice and knows whether it’s been paid. Half
- 10 Track backlinks once they’re up, keep the record Automated, and much stricter than today — it keeps checking forever, not just once. This is what we’re building first. Automated
Plus one step that doesn’t exist today at all: a permanent watch on every link we’ve bought. That’s next.
First thing we build: audit the links we already own
Irma is sending over the existing sheet. This runs against it and needs nothing else finished.
This was originally the last phase. We’ve moved it to first, because it has no dependency on anything else and it’s the highest value for the least work in the whole plan.
For every link on the existing sheet, we fetch the page and check four things:
- aIs our link still on the page at all?
- bDoes the anchor text still say what we agreed?
- cIs the page still live, and still indexable?
- dIs the link still dofollow?
Check (d) is the failure nobody catches. A site can quietly change a paid link to rel="nofollow" or rel="sponsored". The link still looks completely normal on the page — same words, same underline, clicks through fine — but it now passes no ranking value at all. You cannot see it by looking. You have to read the page’s source.
So a link can be sitting there, looking healthy, doing nothing for us, for years. That’s why rel is tracked as its own field and any change to it raises an alert.
And we check our end too. A link can be perfectly healthy on their side and worth nothing because the page it points at moved, redirected, or 404s. Worth checking both ends.
| Linking site | Article carrying the link | Brand | Our page | rel | Verdict |
|---|---|---|---|---|---|
| beautyjournal-example.sg | /best-pigmentation-clinics/ | slac | /skin/pico-laser/ | dofollow | Healthy |
| sgwellness-example.com | /skin-tightening-guide/ | slms | /treatments/hifu/ | nofollow | Switched to nofollow |
| lifestyle-example.sg | /hair-thinning-tips/ | tcl | /hair-loss-treatment/ | — | Link removed |
| clinicreview-example.com | /skin-boosters-reviewed/ | plmc | /aesthetics/profhilo/ | — | Their page 404s |
| healthmag-example.sg | /wellness-trends-2026/ | pww | /wellness/iv-drip/ | dofollow | Our page redirects |
| directory-example.com | not recorded | slac | /skin/melasma-treatment/ | unknown | Locating the article |
What Irma’s sheet needs to have: at minimum the linking site and which of our pages it points to. Anything more — the exact URL of the article, the anchor, what we paid, when — makes the audit better, but we can work without it. Where only the domain is recorded, we can usually recover the specific article from the Ahrefs data we already hold.
Expect this report to contain surprises. That’s the point of running it.
Why we won’t buy on Domain Rating
A short but consequential change to how sites get qualified.
Domain Rating is gameable, and the sites keenest to sell us links are frequently the ones gaming it. A site can show DR 60 while having almost no real visitors and an enormous number of outbound links — which is the signature of a link farm, not a publication.
So a site is rejected outright, before it ever reaches the sheet, if any of these are true:
- —Organic traffic below a floor DR without readers is the tell.
- —Traffic down more than half year on year The site is dying; our link dies with it.
- —Far more outbound links than inbound They sell to everyone.
- —No overlap with health, beauty, wellness or lifestyle Relevance.
- —Domain Rating below a floor A floor, not the criterion.
Everything that survives is scored and ranked rather than simply passed — on authority, real traffic, topical fit, share of Singapore traffic, and value for money against the rate quoted. A pass/fail filter can’t answer the question you actually have each month, which is “which six of these forty do we buy?”. A ranking can.
The exact thresholds in the list above are opening guesses. We should set them properly after the first cycle, once we can see what they let through and what they block.
One site linking to several of our brands is a visible pattern. The system enforces limits rather than leaving it to judgement: never two brands on the same article, one live link per site per brand, at least 90 days before a different brand goes on the same site, and explicit sign-off before a site carries a fourth brand.
Which page on their site — not just which site
Added after Vance’s note. It changes what we ask for and what we pay for.
A link is bought on a page, not on a website. And the gap between two pages on the same site is routinely wider than the gap between two sites — a strong publication’s dead 2019 archive post is worth less to us than a mid-sized site’s live, on-topic, actually-ranking article.
So for every site that passes qualification, we look at its individual pages and rank them on four things:
- —How much traffic that page gets Not the site — the page.
- —That page’s own authority Ahrefs URL Rating. A homepage-linked guide carries far more than a buried post.
- —How many outbound links are already on it A page already pointing at forty other sites dilutes ours to almost nothing.
- —Whether that page is genuinely on our topic And ideally already ranks for something near it.
Then we name that article in the outreach email. “Could you add a link in [this specific guide]?” is a much stronger and more professional ask than “do you sell links”. It also means we can price the page before agreeing to anything — and it stops the site quietly defaulting to whichever page costs them least to touch.
We price the page we asked for. If the link turns up somewhere else — a different, weaker article — that’s a delivery problem, even though the link is live and working. The system flags it and shows both pages’ numbers side by side, which makes that a short conversation with the site rather than an argument.
One consequence worth knowing: a site may quote different prices for different pages. That’s treated as several separate prices, not one site rate — because they’re genuinely different products.
How buying will work
Mainly for Clara — this is the approval surface.
Each cycle you get a ranked shortlist in the sheet: the best-scoring options currently worth buying, each with the brand, their article, our target page and the anchor already filled in. You veto rows with a reason; one sign-off approves everything not vetoed.
The intent is that three people look at one view, once a month — rather than forty rows arriving continuously.
There’s no weekly or monthly budget ceiling. The discipline is per link: we aim to stay within US$100 a link.
That’s a guide, not a gate. Anything above it is flagged with how far over it is and needs a reason when you approve it — but it’s never dropped automatically, because a strong on-topic Singapore publication at US$150 can easily be the best buy on the list while a US$150 link farm isn’t worth anything. The running total is there for information, not to cut the list off.
| # | Site | Their article | Brand | Our page | Anchor | Rate | vs guide | Score | Decision |
|---|---|---|---|---|---|---|---|---|---|
| 1 | beautyjournal-example.sg | /best-pigmentation-clinics/ 4.2k/mo · UR 41 | slac | /skin/pico-laser/ | pico laser | US$85 | within | 8.9 | Approved |
| 2 | sgwellness-example.com | /skin-tightening-guide/ 2.8k/mo · UR 36 | slms | /treatments/hifu/ | HIFU Singapore | S$120 | within | 8.4 | Approved |
| 3 | hairjournal-example.sg | /hair-thinning-tips/ 1.1k/mo · UR 29 | tcl | /hair-loss-treatment/ | hair loss clinic | US$95 | within | 8.1 | Veto — Clara runs competitor ads |
| 4 | healthmag-example.sg | /wellness-trends-2026/ 9.6k/mo · UR 52 | pww | /wellness/iv-drip/ | IV drip therapy | US$165 | +US$65 | 9.1 | Needs a reason |
| 5 | clinicreview-example.com | /skin-boosters-reviewed/ 3.4k/mo · UR 38 | plmc | /aesthetics/profhilo/ | Profhilo treatment | S$140 | within | 7.5 | Price is 5 months old |
| 6 | skincare-example.com | /archive/2019-roundup/ 30/mo · UR 8 · 44 outlinks | slac | /skin/melasma-treatment/ | melasma treatment | US$70 | within | 3.1 | Cheap, but a dead page |
Two more things worth flagging about that view:
Quote age is shown, and there’s no automatic chasing. A rate quoted six months ago isn’t really a rate. We chose to show you how old each price is and let you request a re-confirm on the rows you care about, rather than have the system automatically email everyone every quarter. The trade-off is that prices in the pool will drift out of date over time — if that becomes annoying, we turn the automatic version on.
For SLAC and PLMC there’s an extra gate. Because those two are licensed healthcare providers, a paid placement whose surrounding sentence makes a treatment claim is healthcare advertising that we placed. So before payment is released, the anchor and the sentence around it go through the HCSA checker. A fail blocks payment and we ask the site to reword. The other three brands skip this.
Three decisions already made
Recorded in full in the repo. Here’s the plain-language version, because two of them may surprise you.
We’ll send from a real group address, not a lookalike domain
The usual advice for cold email is never to send from a domain you care about. That advice assumes you’re selling. We’re buying — from people who often publicly advertise that they want the money. Complaints should be near zero, replies high. And credibility matters more here than usual: a webmaster who looks us up needs to find a real ten-outlet clinic group, because their actual question is “will these people pay me?” That affects the price we’re quoted, not just whether we get a reply. So: one address on slaestheticgroup.com. Never any brand’s patient-facing domain — those carry EDM and patient mail and stay well out of it.
We stay deliberately under Singapore’s bulk-email threshold
Two useful findings. First, the PDPA largely doesn’t apply — a work email address is “business contact information” and is excluded, so we don’t need consent to email an editor at their work address. Second, the Spam Control Act only bites on mail sent in bulk, which it defines as more than 100 similar messages in a day, 1,000 in a month, or 10,000 in a year. At around 100 a month we’re under all three — which matters a great deal, because crossing them would legally require us to put <ADV> at the front of every subject line. That would destroy reply rates. So the volume ceiling is enforced in the software rather than left to habit. The one risk is our opening burst — see question 2.
A price ceiling per link, and no monthly budget
Rather than a monthly pot that has to be spent or lost, the control is a guide price of US$100 per link with no weekly or monthly cap at all. That fits how this actually works: good opportunities don’t arrive evenly month to month, and a budget cycle would either force us to buy weak links in a quiet month or turn down strong ones in a busy one. Anything over the guide is flagged with how far over — and needs a reason — but is never dropped automatically, because price alone doesn’t tell you whether a link is worth buying.
The sheet stays your working surface
A database holds the machinery — who was emailed when, what’s due for a follow-up, the verification history. But every decision still happens in a Google Sheet, because that’s where this work already happens and a spreadsheet is genuinely the right tool for “filter, sort, discuss, tick”. The rule that keeps the two from fighting: every column belongs to exactly one side. The system writes the metrics and statuses; you write the decisions, notes and overrides. Nothing is owned by both, so nothing can silently overwrite anything.
What we need from you
The reason for the meeting. Roughly in order of how much they unblock.
- The existing backlinks sheet — and what’s actually in it Unblocks the audit entirely, which is the first thing being built. The columns you have determine how much we can check straight away: do you have the exact article URL, the anchor we agreed, what we paid, when it went up? Or only the site name? Owner Irma · blocks the audit
- How many sites do we want to approach in the first push? This is the one number with a legal consequence. More than about 800 emails inside any 30-day window and we cross into “bulk” and legally have to prefix every subject line with <ADV>. If the opening list is large, we spread it over a few months instead. Easier to plan for now than to discover mid-burst. Owner Irma + Vance · blocks outreach build
- Is “US$100 a link” literally US dollars? Answered already: no weekly or monthly cap, and we aim for US$100 per link. The remaining wrinkle is that most Singapore sites will quote us in SGD. US$100 is roughly S$130 — so a site quoting S$135 is either inside the guide or outside it depending on which currency the rule is really written in, and on the day’s exchange rate. Cleanest is to fix a policy figure in both currencies and stop it moving with FX. Which do we set? Owner Clara · small but it decides what gets flagged
- Do we buy rel="sponsored" links at a lower price, or refuse them? A sponsored or nofollow link passes no ranking value. Right now the system treats any link becoming sponsored as a fault. If we’d knowingly buy some at a discount — for referral traffic or brand visibility rather than ranking — we need to record that per link, or the audit will keep flagging them as broken when they’re working as intended. Owner Irma + Vance
- If a site offers a different article than the one we asked for, who decides? Now that we propose a specific page and price it on that page’s numbers, sites will sometimes come back with “we’d rather put it here instead”. Sometimes that’s fine, sometimes it’s a much weaker page at the same price. Should the system accept it automatically when the alternative scores close to the original, or should it always come to you? Owner Irma
- When two brands both want the same good site, who wins? Today it would just be whichever scores higher. If there’s a real priority order between brands — or a rule like “SLAC first this quarter” — better to say it than to have the ranking decide by accident. Owner Irma
- Sanity-check the reject thresholds The floors in section 04 are opening guesses. Not blocking anything — but after the first cycle we should look at what got rejected and confirm we agree with it. Owner Irma · after cycle 1
Order of work
Each step is useful on its own — nothing waits for the whole thing to be finished.
- Done Spec and decisionsWritten up, decisions recorded. 1 Sep.
- Next Audit the links we already ownRuns against Irma’s sheet. Delivers the report in section 03, then keeps watching those links permanently. Waiting only on the sheet.
- Then Discovery and scoringA ranked pool of qualified sites appears in the sheet — each with the best article on it already identified and scored. Outreach is still by hand at this point, but steps 1–3 and 7 of the manual workflow are gone.
- Then Finding contactsEmail addresses appear against each site. Sending is still by hand.
- Then The outreach engineSending, chasing, reading replies, pulling out rates. This is the phase the project exists for — the other work is groundwork, not the goal.
- Then Buy List, approvals, invoice trackingCloses the loop through payment, with the HCSA gate for SLAC and PLMC.
It was originally last. It has no dependency on any other phase, it’s the smallest piece of work in the plan, and it’s the only one that tells us something about money we’ve already spent. If some of the links we’re paying for have quietly stopped working, we want to know that before we buy more.