Dealroom.net Scraper - Companies, Startups & Market Maps avatar

Dealroom.net Scraper - Companies, Startups & Market Maps

Pricing

from $1.00 / 1,000 company intelligence records

Go to Apify Store
Dealroom.net Scraper - Companies, Startups & Market Maps

Dealroom.net Scraper - Companies, Startups & Market Maps

Scrape Dealroom.net market maps, company lookup results, live signals, and newly founded startup records. Supports Dealroom URLs, company names, market-map ids, sorting, capped runs, rich normalized company fields, and optional MCP connector export.

Pricing

from $1.00 / 1,000 company intelligence records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

4

Monthly active users

4 days ago

Last modified

Share

Dealroom Scraper: Startup, Funding and Market-Map Intelligence

Dealroom Scraper turns Dealroom into a clean startup and funding intelligence feed. Search public market maps, pull every company inside one, resolve company names to their Dealroom profile links, follow pasted Dealroom links, watch live funding signals, or track just-founded startups, all normalized into one company record shape with industries, funding, founders, locations and social links. Export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • Six ways to collect company data. Search market maps by keyword, pull every company inside one, resolve company names, paste Dealroom links, watch live funding signals, or track just-founded startups. No need to build feed URLs by hand.
  • One normalized record shape. Every mode returns the same company envelope: identity, market and product profile, growth and traction, funding, investors, locations, web and social presence, plus the complete public source object so nothing is lost.
  • Predictable, capped runs. Max items defaults to a finite 20, so a first run never surprises you. Set it to 0 to remove the cap entirely.
  • Resume big pulls for free. Paste a previous run or dataset id and the next run skips everything already collected there, so you never pay twice.
  • Built for schedules. Incremental mode returns only new, updated and reappeared records on recurring runs, and a run that could not fully scan the tracked search skips expiry detection instead of guessing.
  • Optional connector export. Pipe a summary of every saved record into Notion, Linear, Airtable or another Apify actor, as an extra step that never changes the dataset.
  • Drop-in compatible inputs. A limit alias and a reserved maxPages field make it easy to swap in for a similarly shaped scraper without rewriting your integration.

Use Cases

  • VC and startup scouts: monitor Dealroom market maps for new entrants and funding signal changes in a sector.
  • Growth and competitive intelligence teams: resolve named competitors to their Dealroom profile links, and pull market-map companies to track public funding and employee signals over time.
  • Newsletter and media teams: pull just-founded startups and live funding signals to source story leads.
  • Data and research teams: build a normalized company database from one or more market maps for internal analysis.
  • Sales and business development: watch a target account list, by name or by URL, for material changes using incremental mode.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
type"company" (also "marketmap", "company_lookup", "signal" depending on mode)
id118442
url"https://app.dealroom.co/companies/example-ai"
record_id"example-ai"
company_name"Example AI"
company_website"https://example-ai.com"
company_identity.tagline"AI infrastructure for enterprise teams"
company_identity.about"Example AI builds developer tools for..." (just-founded startups and market-map search rows; null in market-map companies, lookup and signal records)
market_and_product_profile.industries[{ "name": "Artificial Intelligence" }]
market_and_product_profile.tags[{ "name": "Seed" }]
market_and_product_profile.lists{ "items": [{ "title": "AI Startups 2025", "id": "53885" }], "total": 1 } (market-map companies mode)
growth_and_traction.employees"11-50" (market-map companies mode)
funding_and_financials.total_funding_enhanced{ "amount": 4200000, "currency": "USD" }
investors_and_ownership.founders[{ "name": "Jane Doe" }]
locations_and_operations.hq_locations[{ "city": "Berlin", "country": "Germany" }]
locations_and_operations.launch_year2022
web_and_social_presence.linkedin_url"https://linkedin.com/company/example-ai" (just-founded startups only)
news_and_signals.news_availabletrue (lookup and company-URL results only, when "Include news metadata" is on and a news page exists; always false for other record types)
news_and_signals.sentiment_availablefalse
source_recordthe untouched public source object for that row
scrape_metadata.source_page_url"https://app.dealroom.co/lists/53885"
scrape_metadata.seed_input_type"marketmap"
scrapedAt"2026-09-28T10:00:00.000Z"

A marketmaps-mode run returns type "marketmap" records instead: one row per public market map, with company_name holding the map's title, url its Dealroom charts link, company_identity.about and tagline both set to the map's description, and market_and_product_profile.lists/lists_ids pointing back at the map itself, while funding, employee and founder fields stay empty. A lookup-mode run returns type "company_lookup" records: an identity path/name/url match plus news_and_signals.news_available/sentiment_available flags; the profile fields (description, headquarters, founders, investors, valuation range, headcount, investments and patent families) are filled from the public company page when one is available and stay empty when the company has no public page. The lookup index itself carries no industry data. A liveSignals-mode run returns type "signal" records: id and company_name derived from the signal headline text since the feed has no upstream id, company_identity.tagline holding the short description, locations_and_operations.hq_locations with just a city, funding_and_financials.total_funding_enhanced holding the signal amount, and news_and_signals.signal_type/signal_time describing the event, with no website, industry or founder data.

Company profile details. For name-lookup rows (including pasted company links) the actor also reads the public Dealroom company page and fills the existing profile fields: description, logo, headquarters city and country, founding year, valuation range with the date last recorded, headcount range, employees mapped, founder names, investor names with the investor count, the number of active patent families (investors_and_ownership.patents_count, from the page's Dealroom / PatSnap patent estimate), and the company's own investments and M&A. This adds no charge and no new field blocks. A company without a public page, or a page that cannot be read in a given run, leaves those fields empty for that run. Dealroom's public page shows ranges for valuation and headcount, and exact values stay behind Dealroom's own app. Shapes: funding_and_financials.latest_valuation_enhanced is { "range": "<valuation range as shown>", "last_recorded": "Mar/2026" }; each funding_and_financials.investments[] entry is { "name", "sector", "year", "month", "kind", "stage", "amount", "currency" } where kind is Venture or M&A, stage is the round name Dealroom shows (Seed, Series A, Series B, Series C+, Late, Other, M&A), and amount is in whole US dollars (currency is USD; both are null when the deal amount is undisclosed), the same unit as total_funding_enhanced.amount. Profile pages are read on the connection that is already serving the other requests; a failing profile page never makes the run switch to a paid connection. In Incremental mode, runs saved before this addition do not flag every company as UPDATED once: for name-lookup records, fields that were empty and are now filled count as unchanged on the first run, and later changes are reported normally. A profile page that could not be read in a run is never reported as a change: the last profile data seen for that company is kept for comparison, so the record stays UNCHANGED (not returned and not billed unless Emit unchanged is on) and the run after a successful read is UNCHANGED too. Only name-lookup records carry this profile data; market-map, signal and other records are compared on everything they contain, with no migration.

How to Use

  1. Pick a mode: search market maps, pull every company in one market map, look up companies by name, paste Dealroom URLs, watch live funding signals, or track just-founded startups.
  2. Fill in the fields for that mode: search query, market-map ids, company names, or start URLs.
  3. Set Max items to control run size and cost, and switch news or sentiment enrichment on if you want those signals.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search market maps by keyword:

{
"mode": "marketmaps",
"searchQuery": "climate tech",
"maxItems": 20
}

Every company inside one market map, sorted by funding:

{
"mode": "marketmap",
"marketmapIds": ["landscape-53885"],
"sortBy": "funding",
"maxItems": 100
}

Look up specific companies by name:

{
"mode": "lookup",
"companyNames": ["OpenAI", "Anthropic"],
"includeNews": true,
"includeSentiment": true
}

Paste Dealroom links (company, list, landscape, or dealroom.co/api and /data feed links such as api/marketmaps?q=AI, api/lookup-slug?name=OpenAI, api/live-signals, data/just-founded.json; app.dealroom.co/companies/f?q=OpenAI runs a name lookup). Url mode with the field untouched scrapes a few rows from each of the 11 example links: with several links, each link gets a fair share of Max items (a link that returns less leaves its share to the next ones, and leftover rows fill any spare capacity), so one large market map cannot use up the whole cap. Other modes ignore this field:

{
"mode": "urls",
"startUrls": [
"https://app.dealroom.co/lists/14655",
"https://app.dealroom.co/companies/revolut"
],
"maxItems": 10
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/dealroom-co-scraper").call(run_input={"mode": "marketmap", "marketmapIds": ["landscape-53885"]})
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
print(company["company_name"], company["url"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/dealroom-co-scraper').call({ mode: 'marketmap', marketmapIds: ['landscape-53885'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one specific interrupted run: paste its run or dataset id and this run appends only records not already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduling the same search again and again. State is kept per mode, search, market-map ids, company names, sort order and enrichment toggles (raising Max items or adding a connector never starts a new baseline). Each record is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED, or EXPIRED. EXPIRED is produced only after a run that proved a complete scan of the tracked search: no source was skipped, no source returned an unexpected shape, Max items did not cut the run short, and Resume was not used in the same run. REAPPEARED only occurs for a record an earlier run marked EXPIRED, so it requires Emit expired to have been on. stateKey names or shares the stored state; leaving it empty derives one automatically from the search settings. With Incremental mode off, output is exactly as before.

Send results into your apps (MCP connectors)

Optionally pipe the scraped 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.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where records should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip. If a connector's data is not found or is not connected to your account, that connector is skipped with a warning and the dataset is unaffected.

Input Parameters

ParameterTypeDefaultDescription
modestringmarketmapsCollection mode: search market maps, market-map companies, company name lookup, Dealroom URLs, live funding signals, or just-founded startups.
startUrlsarray11 example URLs, one per supported shape, small feeds firstDealroom company, list, landscape, market-map search, lookup, live-signals and just-founded feed URLs (urls mode only). If you choose urls mode and leave this field untouched, the run scrapes a few rows from each of the 11 links (each link gets a fair share of Max items). Company URLs resolve through the public lookup index; list and landscape URLs collect market-map companies.
searchQuerystringnone (prefill: "AI")Search term for public market-map discovery (marketmaps mode).
marketmapIdsarray["landscape-53885"]Market-map ids or Dealroom list URLs (marketmap mode).
companyNamesarray["OpenAI", "Anthropic"]Company names to resolve through the public lookup index (lookup mode).
includeNewsbooleantrueAdds the news_available flag to each saved record. The enrichment fee applies only to a record that actually gains a real signal, not merely for having this on.
includeSentimentbooleantrueAdds the sentiment_available flag to each saved record. Same enrichment-fee rule as above.
sortBystringsourceSort saved rows: source order, company name A-Z, newest launch year first, or highest funding first.
maxItemsinteger20Maximum rows to save. 0 removes the cap; the selected public source may still return fewer rows than requested.
limitintegernoneCompatibility alias for competitor-style inputs. Only applies when Max items is left at its default of 20; an explicitly different Max items value always wins.
maxPagesinteger0 (unused)Reserved for competitor-input compatibility. Every mode fetches each target in a single request, so there is no page walk to bound. The run stops at Max items regardless of this field.
pageSizeinteger50Page size requested from the source feed. Used only in marketmaps (search) and liveSignals mode.
mcpConnectorsarraynoneOptional: send a summary of each saved record to apps you authorized under Integrations (Notion, Linear, Airtable, Apify).
notionParentPageUrlstringnoneNotion connector only: page under which records are created.
maxNotifyListingsinteger50Cap on records written to each connector per run. Does not affect the dataset.
proxyConfigurationobjectApify datacenter proxy, no groupsRequests are routed through the selected proxy. Datacenter is tried first; if Dealroom blocks it the run escalates to Apify Residential (billed by Apify to your account), then to a backup connection. Free plans have no residential access and run on the backup connection. A run that loads no page ends FAILED rather than empty.
resumeFromRunIdstringnoneContinue one specific interrupted run: paste its run or dataset id and this run appends only records not already collected there.
incrementalModebooleanfalseTurn on for recurring monitoring of the same search. Classifies each record NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED against saved state.
stateKeystringnone (auto-derived from mode/search/filter settings)Name a monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs.
emitUnchangedbooleanfalseAlso return, and bill, records that have not changed since the last incremental-mode run.
emitExpiredbooleanfalseAlso return, and bill, records that were tracked before but are no longer found, marked EXPIRED. Only produced after a run that fully scanned the tracked search.
ignoreFieldsForChangesstring[][]Incremental mode only: field names or dotted paths (e.g. growth_and_traction.employees) that do not count as a change. The fields are still returned.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"type": "company",
"id": 118442,
"url": "https://app.dealroom.co/companies/example-ai",
"record_id": "example-ai",
"company_name": "Example AI",
"company_website": "https://example-ai.com",
"scrape_metadata": {
"source_page_url": "https://app.dealroom.co/lists/14655",
"seed_identifier": "landscape-53885",
"seed_input_type": "marketmap",
"seed_input_value": "https://app.dealroom.co/lists/14655",
"results_page_index": 1,
"result_index": 4,
"extraction_method": "public_feed",
"scraped_time": 1780000000
},
"company_identity": {
"name": "Example AI",
"tagline": "AI infrastructure for enterprise teams",
"about": null,
"path": "example-ai",
"website_url": "https://example-ai.com",
"listing_page": "https://app.dealroom.co/companies/example-ai"
},
"market_and_product_profile": {
"industries": [{ "name": "Artificial Intelligence" }],
"tags": [{ "name": "Seed" }],
"lists": { "items": [{ "title": "AI Startups 2025", "id": "53885", "type": "marketmap", "is_public": true }], "total": 1 },
"lists_ids": ["53885"]
},
"growth_and_traction": {
"employees": "11-50",
"employees_latest": null,
"traffic": { "visitors": null, "sources": [], "top_countries": [] }
},
"funding_and_financials": {
"total_funding_enhanced": { "amount": 4200000, "currency": "USD" },
"investments": [],
"revenues": []
},
"investors_and_ownership": {
"founders": [{ "name": "Jane Doe" }],
"investors": { "items": [], "total": 0 }
},
"locations_and_operations": {
"hq_locations": [{ "city": "Berlin", "country": "Germany" }],
"launch_year": 2022,
"growth_stage": null,
"company_status": null
},
"web_and_social_presence": {
"linkedin_url": null,
"twitter_url": null,
"facebook_url": null,
"instagram_handle": null
},
"news_and_signals": {
"news_available": false,
"sentiment_available": false,
"signal_type": null,
"signal_time": null
},
"source_record": {
"id": 118442,
"name": "Example AI",
"tagline": "AI infrastructure for enterprise teams"
},
"scrapedAt": "2026-09-28T10:00:00.000Z"
}

Output views

The dataset has three views in the Apify Console: Dealroom records (all modes, the company, market-map and lookup columns), Changes (incremental mode) (change status and changed fields), and Live funding signals (signal type, time and amount). Every view reads from the same dataset, so the full record is always available in JSON, CSV or Excel.

Plan Requirement

Requests go through your selected proxy. The default is the Apify datacenter proxy; if Dealroom refuses it, the actor escalates to Apify Residential (billed by Apify to your account), then to a backup connection. Company profile pages are fetched best-effort on the connection already serving the data requests and never trigger the escalation above. Some Dealroom app pages (app.dealroom.co) show a browser challenge to plain connections, so the actor does not rely on a single connection type. Apify proxy access needs a paid Apify plan. On a free plan the run logs "Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable." and, when a page is served that way, "Served over the backup connection (the default connection was unavailable)." Residential access is never forced: you can choose a proxy group or supply your own proxy URLs under Connection & proxy.

If no page can be loaded the run ends FAILED instead of returning an empty dataset, with one of these messages: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required"; "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Dealroom pages."; or "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search." If you see these, upgrade your plan, supply your own proxy URLs, or re-run later.

FAQ

How much does it cost?

Pay per event. The current rates (FREE tier) are shown on the Pricing tab; paid Apify plans get lower tiered rates. The events and when each is charged:

EventPrice (FREE tier)When it is charged
Result (apify-default-dataset-item)$0.002 per recordonce for each record pushed to the dataset
Detail enrichment (detail-enrichment)$0.0008 per recordonce per pushed record that gained a real news or sentiment signal; never merely because the toggle is on
Actor Start (apify-actor-start)$0.08 per runonce per run

With enrichment on and every record enriched that is $2.88 per 1,000 records; with it off, $2.08 per 1,000. Unchanged or suppressed records in incremental mode are not billed. Use Max items to cap the cost of any run.

This actor collects only publicly available startup and funding information. You are responsible for how you use it: follow Dealroom's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Company facts such as funding amounts and founding years are generally factual, but descriptions and other editorial content may be subject to third-party rights.

Can I get only new or changed companies on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only NEW and UPDATED records (plus REAPPEARED if you also use Emit expired) for that saved search, and unchanged records are not returned or billed unless you turn on Emit unchanged.

Why did my run return no EXPIRED records even with Emit expired on?

EXPIRED records are only produced after a run that proved it scanned the entire tracked search: no source was skipped, no source returned an unexpected shape, Max items did not cut the run short, and Resume from a previous run was not used. If any of those happened, the run logs why expiry detection was skipped and leaves the previous state untouched so the next scheduled run can try again.

Why did my run fail instead of returning an empty dataset?

A run ends FAILED when no page could be loaded at all (see Plan Requirement for the three messages), when a Resume run id cannot be read by this Apify account, or when Incremental mode is combined with Resume on a state key that already has saved records (remove Resume, or use a different State key). A source Dealroom answers with "not found" (HTTP 404, for example a market-map id that does not exist) is not a failure: the run logs "No Dealroom record found for ...", still succeeds, and ends with the status message "No Dealroom record found for the requested source(s)" when nothing else was collected. If several sources in a row cannot be loaded on any connection, the run stops early with the connection message instead of retrying every remaining source. A single source that returns an unexpected shape is logged as a warning and the run still returns whatever else could be collected.

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 a summary of results into Notion, Linear or Airtable.

๐Ÿ”— Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

๐Ÿ“‡ BetaList Scraper
Scrape BetaList.com startup profiles with founder and contact enrichment. Extract startup...
๐Ÿ“‡ Ycombinator
Pull every ycombinator.com company across every batch, with founders, social URLs...
๐Ÿ’ผ F6S Scraper
Extract structured data from F6S.com. Scrape funding programs, startup accelerators...
๐Ÿ“‡ Product Hunt
Extract producthunt.com data including products, launches, keyword search results, maker...
๐Ÿท๏ธ FINN.no Jobs Scraper
Scrape active FINN.no job listings by search filters or URL. Extract 30+ fields including...
๐Ÿš— Craigslist Scraper
Scrape Craigslist postings in any of 700+ cities worldwide: price, title, posting text...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support

  • ๐Ÿž 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 contact@abotapi.com.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.