A submission is pending when the directory has received it and has not decided yet. It is live when a stranger can open the listing and nothing on it says “pending”. Scheduled means the platform confirmed a launch date. Submitted on its own only means you pressed the button. Those four words describe four different moments, and a tracker that stores them as one “done” column will report a total nobody can defend. This article explains each state, what counts as proof, and how to report a directory launch in numbers that hold up. For the short definition of the umbrella term, see the listing status entry; for the day-to-day routine, the submission status tracking guide.
One column, five questions
When you submit a product to a directory, the people who care about the result want to know different things:
- Is the work done on my side? Did I fill everything in and press the button?
- Did the platform receive it? A thank-you page, an email, an entry in the account.
- Is it waiting for something? Moderation, a queue slot, an approval, a date.
- Can the public see it? A URL that loads for someone who is not logged in and does not carry a “pending” label.
- Do I need to do anything? A CAPTCHA, a two-factor prompt, a badge on my website, a decision about a paid route.
“Done” answers the first question and silently claims the fourth. That is how a spreadsheet that says 40 ends up meaning 6. The difference between the first two questions has its own entry: draft vs submitted.
Pending vs live, scheduled vs submitted
These are the pairs people mix up most. Each row is the question to ask before you change a status.
| Pair | The difference | Proof that moves it forward |
|---|---|---|
| Submitted vs pending review | Submitted is your action; pending review is the platform’s acknowledgement that moderation is open | A receipt from the platform: success page, email or dashboard entry |
| Pending review vs live | Pending waits for a decision; live is published and unlabelled | The public URL opens signed out, with no “pending” label |
| Scheduled vs live | Scheduled has a confirmed date; live has a public page | Opening the page on or after the date |
| Queued vs scheduled | Queued has a place in line; scheduled has a date | The platform names the date |
| Live vs already listed | Live came from this submission; already listed existed before you started | Checking for an existing listing first |
The last row matters more than it looks. If a directory already lists your product, submitting again creates a duplicate the platform may reject or remove. That is why the tracker has a separate state for it.
Eleven states, grouped by the question they answer
The LaunchRepo tracker (record.py, which writes submissions.json, and the same rules in the local dashboard) uses eleven states. Each one requires a minimum observation before it may be recorded. The dashboard sorts every platform into exactly one bucket, so the buckets always add up to the number of platforms attempted.
| Question | State | Dashboard bucket | Next action |
|---|---|---|---|
| Work on your side | draft |
draft |
Finish and submit, or discard |
| Work on your side | prepared_needs_human |
needs_you |
Do the named step: CAPTCHA, 2FA, badge, decision |
| Received | submitted_pending_review |
pending |
Recheck after the stated review window |
| Received | queued |
queued |
Wait for the queue; recheck, never resubmit |
| Received | scheduled |
scheduled |
Open the listing on the confirmed date |
| Public | live |
live |
Nothing; keep the URL |
| Public | already_listed |
already_listed |
Nothing; do not submit again |
| Stopped | blocked |
problem |
Clear the eligibility or account limit, or drop it |
| Stopped | unavailable |
problem |
Try again when the route works |
| Stopped | deferred_paid |
parked |
Your call: pay outside the run or skip |
| Stopped | not_a_fit |
parked |
None |
Eleven sounds like a lot. In practice each one exists because merging it into a neighbour produced a wrong report at least once. The recording outcomes guide shows the exact commands for each state.
Example 1: SaaSHub, public but pending
SaaSHub’s submission, documented in the public SaaSHub field guide, produced a product page that anyone with the link could open. It also carried a visible label: Pending approval.
A one-column tracker records that as done, or even as live, because the page loads. The LaunchRepo rule is the opposite: public accessibility alone is not evidence of acceptance. The listing stays submitted_pending_review while the page says pending. It moves to live only after someone opens it again, sees no pending label and records the URL with an explicit confirmation flag. On submission day the live count did not go up; the row got a date to check back instead.
Example 2: TinyLaunch, scheduled with approval outstanding
TinyLaunch, documented in the TinyLaunch field guide, offered a future weekly launch slot on its free Standard path. After the date was confirmed, the dashboard showed it next to Waiting for approval.
There are two wrong ways to record this: live, because there is a date on a calendar, or submitted_pending_review, because approval is outstanding. The tracker records scheduled with the confirmed date and keeps the outstanding approval in the note. Both facts survive: a date exists, and it may not hold. The tracker also refuses a scheduled date earlier than the product’s launch-date floor, so a free slot next Monday cannot fire before your launch page is ready. The scheduled listing entry covers the state in one paragraph.
What the tracker refuses
Rules on a page are easy to skip. These are enforced by the script. Below is a real run on 30 September 2026 in a fresh workspace with an example product: six outcomes mirroring the public field guides, then an attempt to promote SaaSHub to live. buckets.py is a four-line helper written for this article; it prints what the dashboard’s own bucket function returns.
$ python3 scripts/record.py --project projects/my-product saashub submitted_pending_review --note 'Public page labelled Pending approval' --next-action 'Recheck the label after the review window'
Recorded saashub: submitted_pending_review
$ python3 scripts/buckets.py
{"attempted": 6, "submitted": 4, "pending": 2, "scheduled": 2, "problem": 2}
$ python3 scripts/record.py --project projects/my-product saashub live --note 'Page loads' --next-action None
Tracker rejected input: Public states require a reviewed URL and --confirmed-public
$ python3 scripts/record.py --project projects/my-product saashub live --public-url https://www.saashub.com/my-product --confirmed-public --note 'Pending label gone' --next-action None
Tracker rejected input: Platform exists: inspect the record and use --replace intentionally
$ python3 scripts/record.py --project projects/my-product saashub live --replace --public-url https://www.saashub.com/my-product --confirmed-public --note 'Pending label gone' --next-action None
Recorded saashub: live
$ python3 scripts/buckets.py
{"attempted": 6, "submitted": 4, "pending": 1, "scheduled": 2, "live": 1, "problem": 2}
Three things happen here. “The page loads” is not enough for live: the tracker wants a reviewed public URL and the confirmation flag. An existing row is never silently overwritten: changing it takes a deliberate --replace. And promoting SaaSHub moves one platform from pending to live while submitted stays at 4, because a status change is not a new submission. Once a live listing is recorded, the row carries the URL anyone can check.
Three counts instead of one total
A good report never gives a single number. It gives three, and each answers a different question:
- Submitted: how many platforms received the product. In the dashboard that is
pending+queued+scheduled+live. - Live: how many public listings you can link to today.
- Needs you: how many rows wait for a person.
The same rules decide what counts toward a run target. The toolkit’s runbook counts a platform once when it first reaches submitted_pending_review, queued, scheduled or live. Drafts, handoffs, paid routes, rejected candidates and already_listed never advance the target, and later updates to the same platform do not count again. A genuine submission that moderation later rejects stays counted as submitted; only a receipt recorded by mistake is corrected, with --invalidate-run-confirmation.
Our own pilot shows why the split matters. The SeoMap log of 14 September 2026, published on the founder page, had 211 submission attempts: 20 live, 97 pending review and 24 scheduled. The other 70 attempts had not reached any of those three states. “211 done” would have been true in one sense and wrong in every useful one.
Why an agent needs this more than you do
If you submit to five directories by hand, you remember which one is pending and which one showed a calendar. An AI agent that runs a session, closes it and restarts tomorrow, possibly as a different agent on a different machine, does not. It reads the tracker first and decides from the state:
prepared_needs_humanrows andscheduledlaunches due for verification come first.submitted_pending_reviewrows whose stated review window has passed get rechecked: the existing record, never a new submission to jump the queue.liverows are left alone.
Every one of those decisions is wrong if the state is wrong. Recording SaaSHub as live on day one would have meant nobody checked whether it was approved. Recording TinyLaunch as merely submitted would have meant nobody verified the page on the launch date. The states are the agent’s memory, and the local dashboard is where you read them.
If you are setting up your own run, how LaunchRepo works shows where the tracker sits in the workflow, and the SaaS founders page covers a product with a real launch calendar. The tracker, the dashboard and 299 active playbooks (as of 24 September 2026) come with the one-time licence.
Frequently asked questions
What is the difference between pending and live?
Pending means the directory received your submission and has not finished its review. Live means the listing is public and carries no pending label. A page you can open can still be pending, so check the label, not just the URL.
Is a scheduled listing already live?
No. Scheduled means the platform confirmed a launch date; the listing goes public on that date, and approval may still be open. Open the page on or after the date before you record it as live.
Does a thank-you page mean my submission was accepted?
No. A thank-you page shows the form was sent. At most it proves receipt, so the status is pending review until the platform publishes the listing.
How long do submissions stay pending?
As long as the platform’s review takes. Free routes are often slow; one field guide on this site records an estimate of more than 30 days. Use the platform’s stated window, or agree on a follow-up date if it states none.
Should I resubmit if a listing stays pending?
No. Recheck the existing submission after the review window, and contact the platform if its rules allow it. Resubmitting can create duplicates and does not move you up a queue.
Sources: RUNBOOK.md (state table, counting and correction rules), scripts/record.py and scripts/dashboard_status.py in the LaunchRepo toolkit 1.9.0; a real tracker run on 30 September 2026; the public SaaSHub and TinyLaunch field guides (observed 13 September 2026); the SeoMap log of 14 September 2026 on the founder page.