hantiflow.com
Manage personal and business finances in one place
Monthly data report
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 number | Value |
|---|---|
| Submissions received | 235 |
| Verification rate | 63% |
| Median time to verify | 0.0h |
| Launches | 83 |
| Self-scheduled share | 47% |
| Indexable share | 59% |
Each figure is expanded, with its own query, in the matching section below.
| Source | Submissions |
|---|---|
| Web | 215 |
| MCP | 20 |
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;| Measure | Value |
|---|---|
| Submissions received | 235 |
| Verified | 148 |
| Verification rate | 63% |
| Median time to verify | 0.0h |
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;| Measure | Value |
|---|---|
| Launched | 83 |
| Self-scheduled | 39 |
| Self-scheduled share | 47% |
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 | Launches |
|---|---|
| Freemium | 27 |
| Free | 22 |
| Pricing unlisted | 22 |
| Paid | 7 |
| Free trial | 5 |
Median starting price where one was given (15 of 83 launches): $10.
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;| Category | Launches |
|---|---|
| AI & ML | 20 |
| Utilities | 19 |
| API & Dev Tools | 6 |
| Finance | 4 |
| Analytics | 3 |
| Automation | 3 |
| CRM & Sales | 3 |
| Education | 3 |
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;| Measure | Value |
|---|---|
| Launched | 83 |
| Indexable | 49 |
| Indexable share | 59% |
| Median description length | 43 words |
| Under 100 words | 81 (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.
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;| Referrer | Submissions |
|---|---|
| Unattributed | 169 |
| ChatGPT | 39 |
| MCP | 16 |
| Other | 11 |
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;| Requester | Requests |
|---|---|
| Human | 13,865 |
| Crawler | 8,405 |
| Other | 3,625 |
| AI agent | 2,784 |
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;hantiflow.com
Manage personal and business finances in one place
kindlumen.com
Free Stripe donation forms for nonprofit websites.
bretzel-seo.fr
Bretzel SEO, l’outil d’audit SEO local pour agences, freelances et entreprises.
claimlayer.com
Interactive mining claims map for U.S. prospectors
kamnevapps.com
Track passport, permit, insurance, warranty, and renewal dates on iPhone.
kamnevapps.com
Shrink iPhone and HEIC photos for upload limits without a complicated workflow.
boothsummer.com
Turn your browser into your own online photobooth. No shop, no queue, no app: pick a frame, shoot a strip, download it…
noisero.com
Remove background noise from audio and video online
mirrorfly.com
Fully Custom Chat API & SDK for Any Web or Mobile App
geotok.co
Turn the videos you watch into a personal map of places to visit.
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;