Skip to content

Monthly data report

September 2026

Every number below is the direct output of the SQL query printed under it. Nothing on this page is typed by hand.

Data current as of .

Headline numberValue
Submissions received235
Verification rate63%
Median time to verify0.0h
Launches83
Self-scheduled share47%
Indexable share59%

Each figure is expanded, with its own query, in the matching section below.

Submissions
235 received
SourceSubmissions
Web215
MCP20
Show the query
select source, count(*)::int as n
from submissions
where created_at >= '2026-09-01T00:00:00.000Z' and created_at < '2026-10-01T00:00:00.000Z'
  and source not like 'seed%' and not is_internal
group by source
order by source;
Verification
MeasureValue
Submissions received235
Verified148
Verification rate63%
Median time to verify0.0h
Show the query
select
  (select count(*)::int from submissions
     where created_at >= '2026-09-01T00:00:00.000Z' and created_at < '2026-10-01T00:00:00.000Z' and source not like 'seed%' and not is_internal) as total,
  (select count(*)::int from submissions
     where created_at >= '2026-09-01T00:00:00.000Z' and created_at < '2026-10-01T00:00:00.000Z' and source not like 'seed%' and not is_internal
       and verified_at is not null) as verified,
  (select percentile_cont(0.5) within group (order by extract(epoch from (verified_at - created_at)) / 3600.0)
     from submissions
     where created_at >= '2026-09-01T00:00:00.000Z' and created_at < '2026-10-01T00:00:00.000Z' and source not like 'seed%' and not is_internal
       and verified_at is not null) as median_hours_to_verify;
Launches
83 launched
MeasureValue
Launched83
Self-scheduled39
Self-scheduled share47%
Show the query
select
  count(*)::int as total,
  count(*) filter (where self_scheduled)::int as self_scheduled
from products
where status = 'launched' and launch_date >= '2026-09-01' and launch_date < '2026-10-01'
  and source not like 'seed%';
Pricing model
Pricing modelLaunches
Freemium27
Free22
Pricing unlisted22
Paid7
Free trial5

Median starting price where one was given (15 of 83 launches): $10.

Show the query
select pricing_model, count(*)::int as n
from products
where status = 'launched' and launch_date >= '2026-09-01' and launch_date < '2026-10-01'
  and source not like 'seed%'
group by pricing_model
order by n desc, pricing_model;

select count(*)::int as priced,
       percentile_cont(0.5) within group (order by pricing_amount_usd) as median_price_usd
from products
where status = 'launched' and launch_date >= '2026-09-01' and launch_date < '2026-10-01'
  and source not like 'seed%'
  and pricing_amount_usd is not null;
Categories
Primary category, top 8
CategoryLaunches
AI & ML20
Utilities19
API & Dev Tools6
Finance4
Analytics3
Automation3
CRM & Sales3
Education3
Show the query
select c.slug, c.name, count(*)::int as n
from product_categories pc
join products p on p.id = pc.product_id
join categories c on c.slug = pc.category_slug
where pc.is_primary
  and p.status = 'launched' and p.launch_date >= '2026-09-01' and p.launch_date < '2026-10-01'
  and p.source not like 'seed%'
group by c.slug, c.name
order by n desc, c.name
limit 8;
Indexability
MeasureValue
Launched83
Indexable49
Indexable share59%
Median description length43 words
Under 100 words81 (97.6%)

A listing under 100 original words in its description is the single most common reason a page ships noindex, see how ranking works.

Show the query
with launched as (
  select is_indexable,
    case when btrim(coalesce(description, '')) = '' then 0
         else array_length(regexp_split_to_array(btrim(description), '\s+'), 1)
    end as words
  from products
  where status = 'launched' and launch_date >= '2026-09-01' and launch_date < '2026-10-01'
    and source not like 'seed%'
)
select
  count(*)::int as total,
  count(*) filter (where is_indexable)::int as indexable,
  count(*) filter (where words < 100)::int as under_100_words,
  percentile_cont(0.5) within group (order by words) as median_words
from launched;
Referrers
Submission first-touch attribution
ReferrerSubmissions
Unattributed169
ChatGPT39
MCP16
Other11
Show the query
select
  case
    when referrer_source = 'chatgpt.com' then 'chatgpt.com'
    when referrer_source = 'mcp' then 'mcp'
    when referrer_source is null then 'unattributed'
    else 'other'
  end as bucket,
  count(*)::int as n
from submissions
where created_at >= '2026-09-01T00:00:00.000Z' and created_at < '2026-10-01T00:00:00.000Z'
  and source not like 'seed%' and not is_internal
group by bucket
order by n desc;
Page requests
/tool/[slug], by requester type
RequesterRequests
Human13,865
Crawler8,405
Other3,625
AI agent2,784
Show the query
select bucket, sum(n)::int as n
from listing_requests
where day >= '2026-09-01' and day < '2026-10-01'
group by bucket
order by n desc;
Top launches
By points (votes + listing score)

hantiflow.com

Manage personal and business finances in one place

Freemium · from $2.99

kindlumen.com

Free Stripe donation forms for nonprofit websites.

Free

bretzel-seo.fr

Bretzel SEO, l’outil d’audit SEO local pour agences, freelances et entreprises.

Freemium

claimlayer.com

Interactive mining claims map for U.S. prospectors

Freemium

kamnevapps.com

Track passport, permit, insurance, warranty, and renewal dates on iPhone.

Freemium

kamnevapps.com

Shrink iPhone and HEIC photos for upload limits without a complicated workflow.

Freemium

boothsummer.com

Turn your browser into your own online photobooth. No shop, no queue, no app: pick a frame, shoot a strip, download it…

Free

noisero.com

Remove background noise from audio and video online

Freemium · from $0.5

mirrorfly.com

Fully Custom Chat API & SDK for Any Web or Mobile App

Pricing unlisted

geotok.co

Turn the videos you watch into a personal map of places to visit.

Freemium
Show the query
select *
from products p
where p.status = 'launched' and p.launch_date >= '2026-09-01' and p.launch_date < '2026-10-01'
  and p.source not like 'seed%'
order by ((case when p.launch_date is not null and now() < ((p.launch_date::timestamp + interval '17 hours') at time zone 'utc') then 0 else p.votes_count end) + p.ai_score) desc, p.launch_date desc
limit 10;