Sign in
Type an owner email and we will send you a sign-in link that brings you straight back here. There is no admin password. This page asks for a fresh sign-in every 12 hours, even while the rest of the site still remembers you.
Online now
Members with a visible page in the last two minutes, counted once across tabs and devices. Page names show the section being viewed. This does not confirm someone is reading.
Checking who is online...
Right now
Service checks
Review a check to clear it from your list for 24 hours. Changed checks return. Reviewing does not fix or delete anything.
Problem reports · what members have told us is wrong
Archive reports you have dealt with, save others for later, or delete unwanted reports and their attached images permanently. These actions are shared between both owners.
Just happened
The last few things members sent, newest first. Click a row to read the whole exchange and see what it cost. A failed attempt opens to what was recorded about it: the words the member saw, the provider's message and its reference code. The full feed, with search, is on the Activity tab.
Pages · what members open, and how long they stay
Counted by page, never by person. Time counts only while a page is on screen, so a tab left in the background adds nothing. Members counts each person once a day: someone who comes back on three days counts three times.
Everything members have sent
Every report, follow-up and chat message, newest first. Search by a person's name or any part of their address, narrow to one day, then click a row to read the exchange with its bill underneath. Choose "Failed" to see only the attempts that did not land; each one opens to what was recorded at the time. Nothing here is live typing: a row appears once a message has been sent. While you have a row open, the page stops redrawing this list.
Money
What the site has cost, against its budget. Reports pause by themselves if the month crosses the line; chat never pauses.
Day by day
London days, newest first. Click a day to see exactly what ran on it.
Where this month's money went
Heaviest users this month
Who the spend is actually going on.
How the meter works
People
Add a member
Type their address and they can sign in straight away. Anyone added here is marked as a comp, which means a Substack import can never remove them; they leave only when you press Remove access on their row.
Categories are labels, separate from allowances. Use commas between them. Extra openings are a one-off welcome gift; the monthly plan stays the same. No invitation email is sent by this form. Unused extras expire at the chosen deadline.
Starting from a Substack export? The one-off import is on the Housekeeping tab. After that, add and remove people here.
Add a group
For a small list of new members. Everyone gets the plan, categories and welcome extras chosen here. Existing accounts are skipped, including people whose access was removed. Nobody loses access.
CSV means a plain list with commas between the columns, which is what Substack and Stripe give you when you export. One person per row, up to 200. A first row naming the columns is optional: email, Email Address or Customer Email all work, with a name column beside it if you have one. Put names containing commas in double quotes. An address that appears twice is counted once. Any other column (a plan, a status) is refused, so a whole export pasted by mistake adds nobody.
For a first-month welcome gift, choose 30 days. The regular monthly allowance renews on the first of each month; unused welcome extras expire after 30 days. No invitation email is sent. Members sign in using their email address.
Give extra company openings
Give current active members a one-off extra allowance, on top of their normal monthly openings. Owners already have unlimited access and are excluded. New members joining later are not included.
Extras are shared across the whole chosen period, not renewed each month. Unused extras expire at the end of the period. Preview the recipients before giving them.
Everyone
Addresses are shortened here, so a list of everyone's email never sits open on screen. Press Open on a row for the full address. Search still reads the real ones, so any part of an address finds its person.
Look one person up
Everything about one member: usage, credits, history, and every sign-in attempt.
Terms of service
Who has accepted the current version of the terms, and who has not. The version is the string set in config/access.json, not a fingerprint of the wording: a typo fix leaves every acceptance standing, and a change to what a member is agreeing to is a new version. One person's own history is on their record, under "Look one person up".
Is email actually working?
The one thing that is invisible everywhere else: if no mail provider is configured the site writes sign-in links into its own log and reports success, so members get nothing while everything looks fine.
Recent sign-in attempts
Who tried to get in and what happened. This is the answer to "my friend says he cannot sign in". Addresses appear only for people who are already members: for anyone else we store a scrambled fingerprint instead, so a stranger typing their address into the sign-in box never lands on file.
The site · what members are being told, and what is switched off
A message across the top of every page
One line, on every page, for everybody. Use Something new for an announcement and Something wrong for a problem. A member can wave an announcement away; a problem stays up until you take it down.
Only for a problem. Ticked, members get the same full box maintenance uses, in your words, and nothing on the site works until you take it down. Leave it clear for a problem worth mentioning but not worth stopping anybody, like prices running late.
Maintenance
A box in the middle of the page that stops people using it. Tick one part of the site, or tick the whole site. The hours are what members are told to expect: they are a promise, not a timer, so nothing comes back on by itself and the box stays until you turn it off here. You are an owner, so you keep seeing the pages as normal.
Documents company filings and results
Choose a company to inspect its documents. Adding a document reads its text locally and does not start a paid rebuild.
Rebuilds and permitted PDF transcription use the configured spending limits. Fetching documents and reading text locally are free.
Add a document for the ticker above
Investor page address
Use the company's own investor page. A new path on the same refused website does not restart its seven-day wait.
Leave blank to clear the owner override and use discovery again.
Company library status
From Sensei · your own articles and newsletter links
Write a special edition, share a newsletter link, or keep a draft for later. Drafts are seen only by the owners; members see a piece once you publish it, and you can feature one on the home page and Today.
The dashboards
When each stored dashboard copy was last rebuilt. A build that fails leaves the previous copy serving quietly, with nothing but the page's own "last refreshed" line to say so. This table is where a missed rebuild shows up.
Housekeeping
Flagged outputs
A report or chat a member marked as wrong. Review these in the weekly 30 minutes.
Earnings calendar · add a reporting date by hand
Type one line, like Tesco (TSCO, UK) 30 Sep confirmed, after the close. Preview shows exactly what the calendar would store, and nothing is saved until you confirm. A date you save here is yours: the overnight research can see it but can never overwrite or remove it. Say confirmed only if the company has announced the date itself; say expected if it has not.
Economic release forecasts
Enter a published analyst poll before its release. The source, reference period and measurement basis travel with the figure; it locks at release time. These feeds are seasonally adjusted. Do not enter an unadjusted annual CPI headline forecast.
For a monthly release, use the first day of the month it describes. For weekly claims, use the week-ending date. The release date is separate.
Onboard a paid newsletter group
Upload one group at a time. Only listed accounts are added or updated. Nobody missing from this file loses access. Email is required; name is optional. This does not send invitations.
For annual members, email,name is enough after you have checked their membership. Renewal settings and ISO dates are optional reference information, not access timers. Remove access manually after your membership checks. Cancelling monthly members need separate review.
Import a Substack export
For the first big list, or a rare full refresh. Substack → Settings → Subscribers → Export, then drop the exported file (a .csv) in below, or paste its contents, preview, then apply. Preview changes nothing. Anyone in the file who is not yet a member is added; anyone who came from a previous import and is missing from this one loses access. People added by hand on the People tab cannot lose access through an import. Use Onboard a paid newsletter group above for these onboarding lists; this synchronisation expects the complete paid subscriber list.
Use the separate onboarding panel for offer groups. This complete-list refresh retains recorded Desk payments and requires verified subscription details for previously onboarded annual members.
Member tags and plans
For people who are already on the site: paste their addresses, one per line, then choose
what to do with their tags and, if you want, which plan they are all on. A header row and
a name column are fine; anything else is refused. Tags decide which notice card a member
sees at the top of the site (the cards live in config/notices.json): today
reader_offer, monthly_core, leaving,
payment_trouble. Tags never change what somebody can use; the plan does.
Only the people on the list are touched: nobody is added, nobody loses access, and
anyone not on the list is left exactly as they were. Pasting the same list twice changes
nothing the second time.
People who asked to be erased
We keep a scrambled fingerprint of the address and never the address itself, so an import cannot add them back. Only release one if that person has asked to come back. They are added fresh on the next import, with today as the date we first saw them.