Docs
How LaunchScaler works
Six answers, in the order you meet them. Where your listing came from, how to make it yours, what the badge does on your site, how to book a launch day, where your articles get delivered, and how to stop hearing from us.
One
How a listing is made
A URL is the only thing we ask for, and it stays the only thing. Paste it and the scan reads the page the way a browser and a crawler do, then works out the name, the tagline, the description, the category and the tags from what is already there. You never fill in a submission form, because the page has already answered it.
Seven checks run: Search, AI visibility, Backlinks, Security, Compliance, Does it work, and Speed & visual. Each returns its own score out of 100, and the seven roll into one readiness score weighted by how much of each we could actually measure. Anything we could not read is marked not measured rather than counted against you. How we scan has the method and the standard behind each check. What we check lists every individual test.
The bar is 75
Ready at 75 and above. This is the score that opens a launch day.
Needs work from 50 to 74. The listing is public and the report tells you what to fix first.
Not ready below 50. Something is broken enough that sending people there would cost you.
The moment the scan finishes, the domain has a public page and a full report, sitting there with nobody attached to it. No account was needed to make it and none is needed to read it. It waits, unclaimed, until somebody proves the site is theirs.
Every score carries the day it was measured. Fix what the report flagged, run the scan again, and the page moves with the new number. A standing nobody has re-run for three months is marked stale on the listing, so an old measurement never reads as a fresh one.
Two
Claiming your listing
Claiming is what turns a public page into something you can edit, launch, monitor and sell from. Sign in, open the listing, and we give you a random one time token. Put that token somewhere on the domain we can read back, press verify, and the listing is yours.
Pick whichever of the three is easiest on your setup. They prove the same thing and none of them is preferred. The token is generated by us and tied to your account, so it cannot be guessed, and the first person to verify keeps the listing.
Method one: a DNS record
Type TXT
Name example.com
Value launchscaler-verify=YOUR_TOKENOne TXT record on the domain, with the whole value copied exactly. We look it up directly, so it works even if the site itself is behind a login.
Method two: a meta tag
<meta name="launchscaler-verify" content="YOUR_TOKEN">Drop it anywhere in the head of your homepage. We fetch the homepage and read it with a real HTML parser, so formatting and attribute order do not matter.
Method three: a file
https://example.com/.well-known/launchscaler-verify.txt
YOUR_TOKENServe the file at that exact path, with the token as its entire contents and nothing else. Trailing whitespace is fine, anything else is not.
Already verified in Search Console?
Connect Search Console with the Google account that owns the property and we can take Google's word for it. There is no token to place, and the listings you own show up ready to claim.
Verification can be tried up to twelve times an hour, which is more than enough for a DNS record to spread. If it keeps failing, the usual cause is a token that picked up a stray character on the way across, so copy it again from the claim page.
Three
The verified badge
The badge puts your live readiness score on your own site, next to a link that lets anyone check it. Once your listing passes, open its badge page, choose light or dark, and copy the snippet.
There are two versions and they do different jobs. The inline one is self contained SVG: no script, no request to us, and the score frozen at the moment you copied it. The image one loads from us on every view, so it always shows today's number and only shows the check mark once we have confirmed the badge is really on your page.
The image version, with your domain and token filled in
<a href="https://launchscaler.com/v/example.com?t=YOUR_TOKEN" target="_blank" rel="noopener nofollow">
<img src="https://launchscaler.com/api/badge/example.com/image?theme=light"
alt="LaunchScaler readiness badge"
width="272" height="58" loading="lazy">
</a>The token is yours alone
The value after t= is a signature we mint for your domain and no other. A badge lifted from someone else's site will not verify on yours, and a link typed by hand will not verify at all. Anyone who clicks it lands on your listing.
The link is nofollow, on purpose
Every snippet carries rel="noopener nofollow" and that is deliberate. A trust mark spread across hundreds of sites that also passed ranking credit is a link scheme, and our own backlinks check flags exactly that pattern. An honest badge is worth more to you than a short ranking bump.
We look at your homepage for the badge about once a week. If we cannot reach your site, nothing happens: we could not look, which is not the same as you not showing it. If we can read the page and the badge is genuinely gone three checks running, it is withdrawn, and you can put it back whenever you like.
Four
Launch days
A launch day is the day your product appears on the board with everyone else launching that day. You need a claimed listing that has passed the bar. There are two ways to get one.
Free: join the queue
We keep a set number of free slots each day, opening a fixed distance ahead. You take the earliest day that still has room. If the near days are full, the queue keeps walking forward until it finds one, so there is no cut off and no rejection. The chooser shows you the exact date before you commit.
$29: pick the day
Choose any open day, including today, and it is held for you while you pay. Your listing copy is written for you from the scan, and your own edits stay yours. The money buys the date and the writing. It does not buy placement, and it cannot move your score.
The launch page carries your pitch as the page itself worded it, your tags, your gallery, your readiness score with the per check breakdown, and links to your listing, your full report and your review if you have one. The visit link goes to your site. Votes and comments sit beside the score and never move it, which is written on the page so nobody has to wonder.
Before the day arrives, anyone reading can press Notify me on the launch. On the morning it goes live they get an email and a notification, and the count of people waiting builds where you can see it. Discussion opens on the day itself.
Five
Where your articles go
When you approve an article, we deliver it to every destination connected to that website. Each destination is its own delivery, so one failing never holds up the rest. Every credential you give us is encrypted before it is stored and never shown again, and every address we call is checked first, so a destination can never be pointed at a private network.
The signed webhook
Give us an https endpoint and a signing secret and we POST the article to it as JSON. This is the connector behind Framer and every hand built site.
The request
POST https://example.com/hooks/launchscaler
Content-Type: application/json
X-LaunchScaler-Timestamp: 1789012345
X-LaunchScaler-Signature: v1=6f1c… (lowercase hex)The body
{
"event": "article.published",
"article": {
"id": "8f2c0b1e-…",
"title": "How to pick a payments provider",
"summary": "One paragraph, ready for a meta description.",
"body_md": "## The short answer\n\n…",
"keyword": "payments provider",
"domain_key": "example.com",
"published_at": "2026-09-09T08:00:00.000Z",
"cover_url": "https://…/cover.png",
"cover_alt": "A card reader on a counter",
"json_ld": { "@context": "https://schema.org", "@type": "Article" }
}
}Every key is always present. cover_url and cover_alt are null when the article has no cover, and json_ld is null when the article's facts did not support any structured data, which means emit nothing rather than emit an empty block.
The signature
We take the timestamp, a full stop, and the exact body bytes, then sign that string with HMAC SHA256 using your secret and send the result as lowercase hex.
Sign the raw bytes you received. A body you parsed and re-serialised has different key order and different escaping, so the signature will not match, and it will match in your tests right up until the first article whose text contains a character JSON escapes differently.
Verifying in Node
import { createHmac, timingSafeEqual } from "node:crypto";
// `raw` is the request body EXACTLY as it arrived, before any JSON parsing.
export function verify(raw, headers, secret) {
const timestamp = headers["x-launchscaler-timestamp"];
const signature = headers["x-launchscaler-signature"];
if (!timestamp || !signature) return false;
// Five minutes, so a copied delivery cannot be replayed at you later.
const age = Math.abs(Math.floor(Date.now() / 1000) - Number(timestamp));
if (!Number.isFinite(age) || age > 300) return false;
const expected =
"v1=" + createHmac("sha256", secret).update(`${timestamp}.${raw}`).digest("hex");
const a = Buffer.from(expected);
const b = Buffer.from(signature);
return a.length === b.length && timingSafeEqual(a, b);
}Answer with any 2xx and we count it delivered. Tell us where it landed and we can link to it: reply with JSON carrying url or external_url, and optionally an id or delivery_id as your own reference. An X-Delivery-Id header does the same job. We only accept an http or https address.
A good reply
HTTP/1.1 200 OK
Content-Type: application/json
{ "id": "post_4192", "url": "https://example.com/blog/pick-a-payments-provider" }If a delivery fails
We try up to three times, five minutes apart. Anything outside 2xx counts as a failure, as does an endpoint we cannot reach.
If we sent the article and never heard back, we close that delivery as unconfirmed instead of sending it again, because a second copy of the same article on your site is worse than one you have to publish by hand. Key on the article id anyway and update in place, and a retry can never duplicate anything.
The other destinations
Four of these can publish straight to your live site, and none of them does unless you switch it on for that website. The switch is per website, so a shared account can publish live for your established site and stage drafts for the new one.
WordPress
Site URL, WordPress username, application password
Make the application password under Users, then Profile, then Application Passwords. It is scoped and you can revoke it without touching your account password. Articles arrive as a draft and you decide when they go live, unless you turn the live switch on for that website. We find your REST route rather than assume it, so a site on plain permalinks works too.
Ghost
Admin API URL, Admin API key
Paste the whole key, the id and the secret together. We keep only the secret half and mint a fresh five minute token for each request. Articles arrive as a draft, or live if you switch that on for the website.
Shopify
Shop domain, blog ID, Admin API access token
The shop domain is the one ending in myshopify.com, and the blog ID picks which blog the articles join. Articles arrive unpublished so you can read them in Shopify admin first, or live if you switch that on. Covers are not sent to Shopify yet.
Webflow
API token, collection ID, title and body field slugs
Webflow collections are yours to design, so there is no field we can guess. Tell us which field holds the title and which holds the body, and add the summary and cover image fields if you have them. Items are staged by default and go to the live site only if you switch that on. Code blocks arrive as plain text, because Webflow's rich text fields drop them.
Notion
Integration token, database ID
This one is a sync, not a publish. The article becomes a page in your workspace, which is not on the public web unless you publish it from Notion yourself, so it earns you nothing in search. The live switch does nothing here. Name the title property if yours is not called Name.
Medium
Integration token
Medium stopped handing out these tokens and the publishing API may already be gone, so treat this one as best effort. When it works, posts arrive as drafts. When it does not, we tell you rather than pretend, and you can paste the article into Medium yourself.
Framer
Nothing extra, use the signed webhook
There is no separate Framer connector. Point the webhook at a receiver on your own site and you get the same signed delivery every other custom site uses.
Six
Email, and how to stop it
There are two kinds, and only one of them can be switched off. That split is the whole answer, so it is worth thirty seconds.
What keeps coming
The mail your account and your purchases produce: your listing was claimed, your launch is live, your launch day moved, a Watch report, a site that went down, an article published, a publish that failed, a payment outcome, a trial about to convert, and the sign in and password mail your account sends.
These are the product doing the job you asked it to do, so they arrive for as long as you have a listing, a launch or a subscription with us. A launch you asked to be told about is in this group too; pressing Notify me again on that launch is what stops it.
What you can stop
The weekly digest and the nudges: your scan is finished, you can launch this now, your first week in numbers, your standing has gone stale, your score moved.
No more than three of these reach you in any week, counted across everything we send, and none of them is sent overnight.
Every one of those carries an unsubscribe link at the foot, and your mail app shows an Unsubscribe button of its own next to the sender. Press either. One press stops all of them at once, with nothing to confirm and nothing to sign in to, and your receipts and alerts are untouched.
The weekly digest is a separate list with its own link. Unsubscribing there removes your address from it completely, so there is nothing left of you on that list to email.
Start where everything else starts
One URL, seven checks, and a page you can hand to anyone. It costs nothing.