Indie Hackers Products Scraper avatar

Indie Hackers Products Scraper

Pricing

Pay per event

Go to Apify Store
Indie Hackers Products Scraper

Indie Hackers Products Scraper

Scrape the Indie Hackers product directory — name, tagline, logo, and self-reported monthly revenue for every bootstrapped SaaS product. Filter by category and sort by revenue. Export to JSON or CSV. We handle the blocks so your dataset stays clean.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share

Indie Hackers Products Scraper

💰 $5.00 / 1 000 results  ·  pay only for results  ·  no credit card to try

The devil's in the data. 😈

Indie Hackers is where bootstrapped founders publish their product and, often, their real self-reported monthly revenue. This Actor turns that directory into clean rows — name, tagline, logo, MRR, category — so you can screen the bootstrapped SaaS market without opening a single tab.

🎯 What this scrapes

The Indie Hackers /products directory, filtered by zero or more categories and sorted the way you choose (recently updated, recently added, highest revenue, or lowest revenue). Each row is one product card: its slug, name, tagline, logo, and self-reported monthly revenue (when the founder chose to publish one).

🔥 Features

  • 🛡️ We rotate browser fingerprints (curl-cffi impersonation across Chrome, Firefox, and Safari profiles) so every request looks like a real browser, not a script.
  • 🔁 We retry with exponential backoff on 408 / 429 / 503 and honour Retry-After — up to 5 attempts per category page.
  • 🧱 We isolate faults, not runs. A malformed card is skipped and logged; a category that fails to load is skipped too. Your run only fails outright when every requested category is unreachable.
  • 🧊 Dedup you can trust. A product that shows up under two categories you requested is emitted once, attributed to whichever category you listed first.
  • 💰 You pay only for results that land. No data → no charge beyond the small warm-up fee.

💡 Use cases

  • SaaS founders scouting competitor pricing and positioning inside a specific category before they launch.
  • Acquirers and brokers screening bootstrapped products by self-reported MRR for acquisition leads.
  • Investors and researchers tracking how the indie/bootstrapped SaaS market is trending category by category.
  • Growth marketers building a target list of tools in a niche to pitch affiliate or integration partnerships.

⚙️ How to use it

  1. Pick one or more categories (leave empty for the unfiltered directory) and a sorting order — highest-revenue surfaces the biggest self-reported earners first.
  2. Set maxProducts to cap how many rows you want across all requested categories, after dedup.
  3. Run it, then export to JSON, CSV, or Excel — or pull the dataset straight from the Apify API.
  4. Re-run on a schedule to track how self-reported revenue for a category moves over time.

📥 Input

FieldTypeRequiredDefaultNotes
categoriesarray<string>no["ai", "productivity"]Zero or more of the 57 valid Indie Hackers category slugs. Empty array = the unfiltered directory.
sortingstringno"highest-revenue"One of recently-updated, recently-added, highest-revenue, lowest-revenue.
maxProductsintegerno40Hard cap on total rows across all requested categories, after dedup (1-500).
proxyConfigurationobjectno{"useApifyProxy": false}Apify Proxy configuration. No anti-bot surface confirmed on this target, so proxy is optional.

Example input

{
"categories": ["ai", "productivity"],
"sorting": "highest-revenue",
"maxProducts": 10
}

📤 Output

One row per product matching your filters.

FieldTypeNotes
product_slugstringSlug parsed from the product's /product/<slug> URL.
product_urlstringFull absolute URL to the product's Indie Hackers page.
namestringProduct display name.
taglinestring | nullProduct tagline, if present.
logo_urlstring | nullProduct logo/avatar image URL.
monthly_revenue_usdinteger | nullSelf-reported monthly revenue in USD. null when the product did not self-report — never faked as 0.
revenue_periodstring | nullRevenue period label (e.g. "month"). null when revenue is absent.
matched_categorystring | nullFirst category slug this product was discovered under this run.
matched_sortingstringThe sorting value used for the request that found this row.
scraped_atstringISO-8601 UTC timestamp this row was scraped.

Example output

{
"product_slug": "jotlee",
"product_url": "https://www.indiehackers.com/product/jotlee",
"name": "Jotlee",
"tagline": "Everything job seekers need in one AI-powered platform",
"logo_url": "https://storage.googleapis.com/indie-hackers.appspot.com/product-avatars/jotlee/128x128_jotlee.webp",
"monthly_revenue_usd": 0,
"revenue_period": "month",
"matched_category": "ai",
"matched_sorting": "highest-revenue",
"scraped_at": "2026-09-14T10:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result$0.0048Per product row written to the dataset

Example: 1 000 products = $5.00 per run ($0.20 start + 1000 x $0.0048). No subscription, no minimum, no card required to try it.

🚧 Limitations

  • Revenue is self-reported and unvalidated. Indie Hackers never audits the numbers founders publish — treat monthly_revenue_usd as a signal of what a founder is willing to claim, not audited financials.
  • ~17-18 cards per category page, no deep pagination in v1. The site's own "Load More" pagination runs through an undocumented client-side index that could change without notice; iterating multiple categories is how you get breadth today. Deeper pagination is a candidate for a future version.
  • maxProducts counts post-dedup rows. If two requested categories share a product, it only counts once against your cap.
  • No product detail-page enrichment. This Actor scrapes the directory card only (name, tagline, logo, revenue) — founder story and milestone data from the individual product page are out of scope for v1.

❓ FAQ

Is the revenue data accurate? It's exactly what the founder chose to publish on their own product page — self-reported, not verified by Indie Hackers or by us. Use it as a directional signal, not a financial statement.

Can I filter by more than one category in a single run? Yes. Pass an array to categories; each one is fetched as its own request, and products that appear under more than one requested category are only counted once.

What happens if a category has no self-reported revenue for some products? Those rows come back with monthly_revenue_usd and revenue_period both null — never a fabricated 0.

Do I need to configure a proxy? No. We didn't find any anti-bot surface on this target during testing, so proxyConfiguration defaults to a direct connection. You can still turn on Apify Proxy if you want the extra layer.

🙋 Your feedback

Found a category slug that changed, a card layout we mis-parse, or a feature you wish this Actor had? Open an issue on the Actor's Apify Store page or message DevilScrapes directly — we ship fixes fast.