TED Contract Expiry Radar - Recompete Leads
Find EU public contracts approaching expiry from TED award notices: incumbent, buyer, value, end date and renewal options.
datagrit › Data › Product Hunt Launch Pricing & Website Intel
DataTop Product Hunt launches with the product's resolved website, live pricing page, plan tiers and lowest paid price.
Product Hunt Launch Pricing & Website Intel reads Product Hunt leaderboards and goes one step further than a launch list: for every launch it follows the Product Hunt link to the product's real website, finds the pricing page and extracts the plans, prices, billing periods, free tier or trial, and the lowest paid price. You get clean, structured records you can export as JSON, CSV or Excel, call through the Apify API, or plug into n8n, Make and AI agents through MCP.
Pick a period, set a limit and run. With no dates it reads the latest finished day.
Each record contains the launch (rank, productName, tagline, topics, votes, comments, featuredAt, productHuntUrl), the website (websiteUrl, websiteDomain, websiteStatus, websiteTitle) and the pricing (pricingStatus, pricingPageUrl, pricingModel, hasFreeTier, hasFreeTrial, contactSales, currency, lowestPaidPrice, lowestPaidPeriod, pricingConfidence, plans).
When a run finds nothing you get one row with found: false (not billed) and the run status explains why.
Pricing pages have no common format, so prices are read from the visible text of the page. pricingConfidence tells you how clear the page was: high, medium or low. Treat low as a pointer to the pricing page, not as a final price. Pages that render prices only with JavaScript, hide them behind a login or block automated requests return pricingStatus other than parsed, and the website URL stays in the row.
A leaderboard page lists the launches Product Hunt shows on its first page, about 15 to 20 per day, week, month or year. To cover more days, pass several dates.
The Actor reads only publicly available pages and does not log in or bypass access controls. You are responsible for using the data in line with applicable laws
(including data protection rules) and the source's terms. If you find an issue, open it in the Issues tab; problems are answered within one business day.
Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.
| Field | Type | Description | Example |
|---|---|---|---|
source | string | Where the row came from: leaderboard (a Product Hunt leaderboard page) or product (a product page you listed in the input). Null on the status row. | leaderboard |
period | string | Leaderboard period the launch was read from: daily, weekly, monthly or yearly. Null for rows read from a product page. | daily |
periodLabel | string | The leaderboard page as a readable label, for example 2026-10-04 for a day, 2026-W40 for a week, 2026-09 for a month or 2025 for a year. | 2026-10-04 |
rank | integer | Position on the leaderboard page, 1 is the top launch. Product Hunt orders the page by its own ranking, so this is the rank Product Hunt shows. Null for product page rows. | 1 |
postId | string | Product Hunt launch (post) ID. Stable across runs and used for the only-new memory. Null for product page rows. | 1259946 |
productName | string | Name of the launched product. | CoreSpeed |
tagline | string | One-line tagline from the launch. | Ship AI agents faster |
topics | array | Product Hunt topics of the launch, for example Artificial Intelligence or Developer Tools. Empty for product page rows and the status row. | ["Artificial Intelligence","Developer Tools"] |
votes | integer | Upvotes on the launch at the time of the run. Null for product page rows. | 412 |
comments | integer | Comments on the launch at the time of the run. Null for product page rows. | 37 |
featuredAt | string | When Product Hunt featured the launch, ISO 8601 in UTC. Null for product page rows. | 2026-10-04T07:01:00.000Z |
productHuntUrl | string | Link to the launch page, or to the product page for rows read from a product page. | https://www.producthunt.com/posts/corespeed |
websiteUrl | string | The product website the Product Hunt link redirects to, without tracking parameters (ref, utm_*), after following the site's own redirects. Null when the link did not resolve. | https://corespeed.io/ |
websiteDomain | string | Host of the website without www. | corespeed.io |
websiteStatus | string | ok when the website answered with an HTML page; blocked (HTTP 401, 403 or 429), unreachable (no HTML page, DNS or connection error), unresolved (the Product Hunt link could not be followed), noWebsite (Product Hunt has no website for the launch) or notChecked (pricing check switched off). Null on the status row. | ok |
websiteTitle | string | The title of the website home page. | CoreSpeed - AI agents |
pricingStatus | string | parsed when plan prices were found; noPrices when a page was read but showed no prices (usage or quote-only pricing, or prices drawn by scripts); blocked, notFound or unreachable when no pricing page could be read; notRequested when the pricing check is switched off. Null when the website itself could not be read. | parsed |
pricingPageUrl | string | The page the prices were read from when pricingSource is pricingPage. | https://corespeed.io/pricing |
pricingSource | string | pricingPage when the prices come from a pricing page linked from the home page or found at /pricing; homepage when the home page itself shows plan prices. | pricingPage |
pricingModel | string | freemium (a free plan and a paid plan), paid (paid plans only), free (no paid price found), usageBased (priced per use or credit), contactSales (a quote is needed for the paid plans) or unknown. Derived from the text and prices of the page, so check pricingConfidence. | freemium |
hasFreeTier | boolean | True when the pricing page shows a free plan or a $0 price. | true |
hasFreeTrial | boolean | True when the pricing page offers a free trial. | false |
contactSales | boolean | True when a plan asks you to contact sales or request a quote. | false |
currency | string | Currency of the prices, ISO 4217 code. | USD |
lowestPaidPrice | number | Price of the cheapest paid plan in the currency, per lowestPaidPeriod. Null when no paid price was found. | 20 |
lowestPaidPeriod | string | Billing period of the lowest paid price: month, year, week, day, one-time, usage (priced per unit or credit) or null when the page does not say. | month |
pricingConfidence | string | high when named plans with prices and billing periods were found, medium when some of that was missing, low when plans had no names or the price came from loose text. Treat low as a hint to check the page. Null when no prices were found. | high |
plans | array | Plans found on the page, in page order. Empty when no prices were found. | [{"name":"Starter","price":20,"currency" |
sourceUrl | string | The Product Hunt page the row was read from. | https://www.producthunt.com/leaderboard/daily/2026/10/4 |
found | boolean | True for a launch row, false on the single status row returned when nothing matched. | true |
scrapedAt | string | When the run read the data, ISO 8601 in UTC. | 2026-10-06T12:00:00.000Z |
{
"source": "leaderboard",
"period": "daily",
"periodLabel": "2026-10-04",
"rank": 1,
"postId": "1259946",
"productName": "CoreSpeed",
"tagline": "Ship AI agents faster",
"topics": [
"Artificial Intelligence",
"Developer Tools"
],
"votes": 412,
"comments": 37,
"featuredAt": "2026-10-04T07:01:00.000Z",
"productHuntUrl": "https://www.producthunt.com/posts/corespeed",
"websiteUrl": "https://corespeed.io/",
"websiteDomain": "corespeed.io",
"websiteStatus": "ok",
"websiteTitle": "CoreSpeed - AI agents",
"pricingStatus": "parsed",
"pricingPageUrl": "https://corespeed.io/pricing",
"pricingSource": "pricingPage",
"pricingModel": "freemium",
"hasFreeTier": true,
"hasFreeTrial": false,
"contactSales": false,
"currency": "USD",
"lowestPaidPrice": 20,
"lowestPaidPeriod": "month",
"pricingConfidence": "high",
"plans": [
{
"name": "Starter",
"price": 20,
"currency": "USD",
"period": "month",
"perSeat": false,
"priceText": "$20"
}
],
"sourceUrl": "https://www.producthunt.com/leaderboard/daily/2026/10/4",
"found": true,
"scrapedAt": "2026-10-06T12:00:00.000Z"
}
| Field | Name | Type | What it does |
|---|---|---|---|
period | Leaderboard period | string | Which Product Hunt leaderboard to read: daily, weekly, monthly or yearly. With no dates the latest finished period is read (yesterday for daily, last week, last month, last year). Each leaderboard page lists the launches Product Hunt shows on its first page, about 15 to 20. |
dates | Dates | array | Optional periods to read, one per line, in the format of the chosen period: 2026-10-04 for daily, 2026-W40 for weekly, 2026-09 for monthly, 2025 for yearly. Leave empty for the latest finished period. At most 60 pages and products per run; entries that do not fit the period are skipped and named in the run status. |
productUrls | Product pages | array | Optional Product Hunt product links or slugs to look up directly, one per line, for example https://www.producthunt.com/products/notion or notion. Each is returned as one row with its website and pricing, without leaderboard fields. |
fetchPricing | Read pricing pages | boolean | Open each product website, find its pricing page and extract plans, the lowest paid price and the pricing model. Switch off to return only the Product Hunt data and the website URL, which is faster. |
minVotes | Minimum votes | integer | Keep only launches with at least this many votes. Launches with no vote count are kept. |
topics | Topics | array | Keep only launches in at least one of these Product Hunt topics, one per line, for example Artificial Intelligence or Developer Tools. Matching ignores case and accepts part of a topic name. |
pricingModel | Pricing model | string | Keep only products with this pricing model: freemium, paid, free, usageBased or contactSales. Any keeps all. Needs Read pricing pages switched on; products whose pricing could not be read do not match a specific model. |
onlyNew | Only launches new since the last run | boolean | Return only launches that an earlier run with the same period, dates, products, topics, minimum votes and pricing model has not returned yet. The memory is kept per combination of those settings in your account, so two monitors never hide each other's launches, and only returned launches are remembered. Use it with a schedule to get a stream of new launches. |
maxItems | Maximum launches | integer | Most launches to return in one run, in leaderboard order across all pages and products. |
proxyConfiguration | Proxy configuration | object | Proxy used for requests to Product Hunt only (it blocks datacenter addresses); product websites are always fetched directly. The default is the Apify residential proxy, which keeps the run working. Switch it off only if you run from your own residential address. |
Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.
curl -X POST "https://api.apify.com/v2/acts/datagrit~product-hunt-launch-pricing-intel/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"period":"daily","fetchPricing":true,"maxItems":20}'import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/product-hunt-launch-pricing-intel').call({
"period": "daily",
"fetchPricing": true,
"maxItems": 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);Install with npm i apify-client.
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/product-hunt-launch-pricing-intel").call(run_input={
"period": "daily",
"fetchPricing": True,
"maxItems": 20
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)Install with pip install apify-client.
Every run reads Product Hunt and the product websites live.
Yes, use Apify schedules with the "only new" option to get each launch once.
The website may be unreachable, may block automated requests, or may show prices only after a click. The row still has the website and the reason.
Open an issue with the input you used; layout changes at the source are fixed quickly.
How to track Product Hunt launches and what each product charges — Pull Product Hunt leaderboards with each launch's real website, pricing page, plan tiers and lowest paid price, from Python or cURL.
Find EU public contracts approaching expiry from TED award notices: incumbent, buyer, value, end date and renewal options.
UK public contracts ending soon with incumbent supplier, buyer, value and contact - recompete leads from Contracts Finder award notices.
French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.
GLEIF legal entity records with direct and ultimate parents, reporting exceptions and direct subsidiaries.