BetaList Scraper - Startup Profiles, Founders & Contacts
Pricing
from $1.25 / 1,000 startup results
BetaList Scraper - Startup Profiles, Founders & Contacts
Scrape BetaList.com startup profiles with founder and contact enrichment. Extract startup names, taglines, descriptions, topics, regions, images, websites, social links, public emails, phone numbers, and founder details.
Pricing
from $1.25 / 1,000 startup results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
BetaList Scraper: Startup Profiles, Websites and Contacts
BetaList Scraper turns BetaList into structured startup data. Discover newly launched and upcoming startups by keyword, topic, region or the latest feed, or paste exact BetaList links, then get each startup's full profile: tagline, description, topics, regions, feature date, screenshots and the resolved company website. Turn on contact enrichment to also pull public emails, phone numbers and social profile links straight from the startup's own site, then export to JSON, CSV or Excel, or read the results through the API.
Why This Scraper?
- Two ways to source. Search by keyword, topic, region or the latest feed, or paste exact BetaList links, including a single startup page.
- Full startup profile. Name, tagline, description, topics, regions, feature date, screenshots and logo, plus the resolved company website behind BetaList's own redirect link.
- Contacts on demand. Turn on contact enrichment to pull public emails, phone numbers and social profile links (LinkedIn, X, Facebook, Instagram, YouTube, GitHub and more) straight from the startup's own site.
- Filters that matter. Boosted-only, and a feature-date window to keep only startups launched in a given range.
- Deep, budgeted collection. Walk as many result pages as you choose per source, capped by Max startups so cost stays predictable.
- Built for monitoring. Incremental mode tracks the same search over time and returns only what's new or changed, and Resume continues one interrupted run without paying twice.
Use Cases
- Investors and scouts: track newly launched startups by topic or region to build a fresh deal-sourcing list.
- Sales and growth teams: build prospect lists with verified websites, emails and social profiles for outbound outreach.
- Market researchers: map which topics and regions are trending on BetaList over time.
- Founders and PR teams: monitor competitors' launches, taglines and feature dates.
- Newsletter and content creators: source fresh startup profiles for roundups and features.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
name | "Sample Startup" |
one_liner | "A short one-line pitch for the product" |
description | "Full description text appears here when detail pages are fetched." |
url | "https://betalist.com/startups/sample-startup" |
slug | "sample-startup" |
website_url | "https://sample-startup.example.com" |
website_domain | "sample-startup.example.com" |
boosted | false |
featured_at | "2026-01-01" |
featured_date_label | "January 1, 2026" |
topic_names | ["Artificial Intelligence", "Productivity"] |
regions | [{ "name": "California", "slug": "california" }] |
primary_image_url | "https://images.betalist.com/startup/sample-startup/cover.jpg" |
image_urls | ["https://images.betalist.com/startup/sample-startup/cover.jpg"] |
logo_url | "https://cdn.betalist.com/000000" |
similar_startups | [{ "name": "Another Sample Startup", "slug": "another-sample-startup" }] |
contacts.emails | ["hello@example.com"] |
contacts.phone_numbers | ["+10000000000"] |
contacts.social_media | { "linkedin": "https://www.linkedin.com/company/example" } |
id | 10000001 |
BetaList does not publish user reviews, ratings or comments on startup pages, so this actor produces none. The site also does not expose a distinct "launched" or "removed" status on a startup profile itself: whether a startup is still findable on the same search, topic, region or the latest feed run to run is the only lifecycle signal available, and Incremental mode's changeType tracks that presence over time (see How to Use below). The only other social signal on a profile page is the "Similar startups" suggestions, captured in similar_startups.
How to Use
- Pick a mode:
search(by keyword, topic, region or the latest feed) orurl(paste exact BetaList links, including a single startup page). - For search mode, fill in keywords, a topic or a region, plus any filters; for url mode, paste the links.
- Turn on Fetch detail pages and/or Enrich with contacts for full profiles and contact signals, and set Max startups to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search by keyword:
{"mode": "search","queries": ["ai", "fintech"],"maxItems": 50}
Search a topic with full profiles and contact enrichment:
{"mode": "search","topic": "artificial-intelligence","getContacts": true,"fetchDetails": true,"maxItems": 25}
Boosted startups only, for a keyword:
{"mode": "search","queries": ["ai"],"boostedOnly": true,"maxItems": 20}
Paste exact BetaList links (a topic page and a single startup page):
{"mode": "url","urls": ["https://betalist.com/topics/artificial-intelligence","https://betalist.com/startups/autobound"],"maxItems": 30}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/betalist-com-scraper").call(run_input={"mode": "search", "queries": ["ai"], "maxItems": 20})for startup in client.dataset(run["defaultDatasetId"]).iterate_items():print(startup["name"], startup["website_url"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/betalist-com-scraper').call({ mode: 'search', queries: ['ai'], maxItems: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
How Max startups and Max pages work together
Max startups is the run's real budget: the actor stops pushing new records once it is reached, and splits that budget evenly across every keyword, topic, region or URL you gave it. Max pages is only a per-source safety ceiling on how many result pages to walk looking for that budget; leave it at the default unless a single source needs to page unusually deep. Boosted-only and feature-date filters drop cards after they are fetched, so a heavily filtered search may return fewer startups than Max startups even before either limit is reached.
Resume and recurring updates
Two different features, both off by default so existing behavior is unchanged:
- Resume (
resumeFromRunId): paste a previous run ID or dataset ID to continue one specific interrupted collection. A startup slug already saved there is never pushed or billed again. For a pasted single-startup URL this also skips fetching it entirely. For search, topic, region and latest-feed sources, the run still walks each source's result pages from the start (or from the page number encoded in a pasted URL), checking every card against the already-saved list, so a resumed run on a large source still fetches as many pages as a fresh one, it just avoids re-pushing and re-billing what it already has. Max startups still caps only the new startups pushed this run. If the pasted ID does not match a run or dataset this Apify account can read, the run fails immediately with a clear message instead of silently starting over. - Incremental mode (
incrementalMode): turn on for daily or recurring monitoring of the same search. The actor remembers the previous run's results itself (keyed on mode plus keywords/topic/region/URLs, the filters, andfetchDetails, or your ownstateKey) and classifies every startup asNEW,UPDATED(withchangedFields),UNCHANGED,REAPPEAREDorEXPIRED.UNCHANGEDstartups are suppressed (not returned, not billed) unlessemitUnchangedis on. A startup is only ever recorded as gone, and only then eligible to come back asREAPPEAREDlater, after a run withemitExpiredon that was not resumed, did not hit Max startups, and reached the natural end of every tracked source;emitExpiredalso gates whether theEXPIREDrow itself is returned and billed that run. A capped, resumed or partial run never marks a still-live startup as gone, and leaves its previously saved state untouched. SettingresumeFromRunIdwhileincrementalModealready has saved state for that same search fails the run rather than silently mixing the two workflows; use a differentstateKeyto bootstrap a separate campaign instead.
Dataset rows produced by Incremental mode add four bookkeeping fields: changeType, changedFields, firstSeenAt, lastSeenAt. These are absent unless incrementalMode is on.
Send results into your apps (MCP connectors)
Optionally pipe results into the apps you already use via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed. Authorize a connector once under Apify, then Settings, then API & Integrations (Notion, Linear, Airtable or Apify), select it in the mcpConnectors input, and set notionParentPageUrl for the Notion connector. The connector receives a condensed, human-readable summary per startup (name, tagline, website, topics, one email or phone), not the full JSON; the complete record always stays in the Apify dataset. Leave the field empty to skip; it never changes the dataset output.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keywords/topic/region/latest feed) or url (paste BetaList links). |
queries | array | none (input editor prefills ["ai"] as a starting example) | Keywords to search on BetaList. Search mode only. |
topic | string | none | A topic slug or browse path to collect. Search mode only. |
region | string | none | A region slug to collect. Search mode only. |
boostedOnly | boolean | false | Keep only startups flagged Boosted. Applies in both modes. |
featuredAfter | string | none | Keep only startups featured on or after this date (YYYY-MM-DD); setting it automatically turns on detail-page fetching, since the feature date only appears on the profile page. |
featuredBefore | string | none | Keep only startups featured on or before this date (YYYY-MM-DD); setting it automatically turns on detail-page fetching. |
urls | array | none (input editor prefills one example topic URL) | BetaList links to collect: the latest feed, search results, topic/browse, region, or a single startup page. URL mode only. |
fetchDetails | boolean | true | Open each startup's profile page for the full description, topics, regions, feature date, screenshots and resolved website. |
getContacts | boolean | false | Visit each startup's own website for emails, phone numbers and social links. |
maxItems | integer | 20 | Maximum startups to save across the run (0 = unlimited, stops at Max pages instead). |
maxPages | integer | 200 | Safety ceiling on pages walked per source; the run normally stops at Max startups first. |
proxy | object | Apify Proxy | Connection settings. |
mcpConnectors | array | none | Send a summary of each result into apps you authorized under Integrations. Leave empty to skip. |
notionParentPageUrl | string | none | Notion connector only: the page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
resumeFromRunId | string | none | Continue one interrupted run without re-collecting or re-billing startups it already saved. |
incrementalMode | boolean | false | Turn on for recurring monitoring of the same search; later runs return only what changed. |
stateKey | string | none | Name an incremental-mode campaign explicitly instead of the auto-derived key. |
emitUnchanged | boolean | false | Incremental mode only: also return and bill startups identical to the last run. |
emitExpired | boolean | false | Incremental mode only: also mark and return (and bill for) startups no longer found, after a complete scan. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"type": "startup","id": 10000001,"url": "https://betalist.com/startups/sample-startup","slug": "sample-startup","name": "Sample Startup","one_liner": "A short one-line pitch for the product","short_description": "A short one-line pitch for the product","description": "Full description text appears here when detail pages are fetched.","visit_url": "https://betalist.com/startups/sample-startup/visit","website_url": "https://sample-startup.example.com","website_domain": "sample-startup.example.com","boosted": false,"featured_at": "2026-01-01","featured_date_label": "January 1, 2026","topics": [{ "name": "Artificial Intelligence", "slug": "artificial-intelligence", "url": "https://betalist.com/browse/ai/artificial-intelligence" }],"topic_names": ["Artificial Intelligence"],"image_urls": ["https://images.betalist.com/startup/sample-startup/cover.jpg"],"primary_image_url": "https://images.betalist.com/startup/sample-startup/cover.jpg","logo_url": "https://cdn.betalist.com/000000","regions": [{ "name": "California", "slug": "california", "url": "https://betalist.com/regions/california" }],"similar_startups": [{ "slug": "another-sample-startup", "name": "Another Sample Startup", "url": "https://betalist.com/startups/another-sample-startup", "tagline": "A related fictional pitch", "boosted": false }],"contacts": {"emails": ["hello@example.com"],"phone_numbers": ["+10000000000"],"social_media": { "linkedin": "https://www.linkedin.com/company/example", "twitter": "https://x.com/example" }},"contacts_lookup_url": "https://sample-startup.example.com","source": {"betalist_url": "https://betalist.com/startups/sample-startup","seed_value": "https://betalist.com/topics/artificial-intelligence","source_url": "https://betalist.com/startups/sample-startup","scraped_time": "2026-01-01T00:00:00.000Z"}}
Plan Requirement
The default connection setting works on any Apify plan, and a run automatically retries with a different connection when one is refused. For larger or more frequent runs, a residential connection group gives more headroom; pick it under Connection.
FAQ
How much does it cost?
You pay a small per-run start fee, then per startup saved to the dataset (the main charge), plus a smaller detail-and-contacts surcharge for every startup whose profile page and/or website was opened. Fetch detail pages defaults to on, and a pasted single-startup URL always opens its profile page regardless of that setting, so most runs pay the surcharge for every startup pushed, even when that page or the website contact lookup finds nothing extra. The Pricing tab shows current rates; use Max startups to cap the cost of any run.
Is it legal to scrape BetaList?
This actor collects only publicly available startup listing data. You are responsible for how you use it: follow BetaList's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Contact details pulled from a startup's own website are the kind of information that site already published publicly, but you should still handle emails and phone numbers responsibly.
Can I get only new or changed startups on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Later runs then classify each startup as new, updated, unchanged, reappeared or gone against the previous run for that same search, and unchanged ones are not billed unless you ask for them.
What is the difference between Resume and Incremental mode?
Resume continues one specific interrupted run using a pasted run or dataset ID, useful right after a run stopped partway through. Incremental mode is for running the same search again and again, for example daily, and remembers state itself so you only get what changed. They solve different problems and are not meant to be combined on the same tracked search.
Why did my run return fewer startups than expected, or none at all?
A boosted-only or feature-date filter can legitimately drop every card fetched. If every request to a listing source (a keyword, topic, region or feed) was refused, that source is skipped rather than retried forever, and if this happens across every source the run still finishes as a normal successful run with an empty (or partial) dataset rather than failing, since "nothing matched" and "the site could not be reached this time" cannot always be told apart. A pasted single startup URL behaves differently: if its page cannot be read at all, the run still pushes (and bills) a row for it with an empty name and one liner, rather than skipping it, since the actor cannot tell a blocked request apart from a removed startup. Check the run log for warnings, then try again or switch to a residential connection group.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
๐ Want more leads data?
Pair this actor with these related scrapers from the same team:
| ๐ Dealroom Startup & Market Map Scraper Scrape Dealroom.net market maps, company lookup results, live signals, and newly founded... | ๐ Herold.at Scraper From $0.80/1K. Scrape Herold.at business listings across Austria into clean JSON. Extract... |
| ๐ Ycombinator Pull every ycombinator.com company across every batch, with founders, social URLs... | ๐ผ F6S Scraper From $1/1K. Extract structured data from F6S.com. Scrape funding programs, startup... |
| ๐ ThomasNet Scraper Scrape ThomasNet suppliers and manufacturers by keyword, category, location... | ๐ Product Hunt Extract producthunt.com data including products, launches, keyword search results, maker... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.