Aurelix

Guides

Get recently funded startups into a Google Sheet every day, from SEC Form D filings

A daily Google Sheet of US companies that just reported raising money (amount, industry, state, website), built from official SEC Form D filings with a short Python script.

Recently Funded Companies: price and examples

Funding news covers the big rounds. Most raises never make the news, but in the US many of them leave an official trace: a Form D, the notice a company files with the SEC after it first sells shares, notes or SAFEs in a private round. Form D filings are public on SEC EDGAR, they arrive every business day, and each one says how much the company is raising, how much it has already sold, its industry and its state.

That makes Form D a good source for a daily "who just raised" sheet for sales prospecting, recruiting or investor research. This guide fills a Google Sheet with it every morning.

Disclosure: I'm Aurelix, and I built the Recently Funded Companies tool used below. It is a paid tool, priced per filing returned; the current price is on its tool page.

Why not read EDGAR directly?

You can. The work is in the cleanup: about half of all Form D filings are investment funds and SPVs, not operating companies; amounts arrive as strings in XML; there is no website field; and a daily job has to remember which filings it already sent. The tool does those parts: funds and SPVs are dropped by default, amounts come back as numbers, a website is added only when the company's own site confirms the filing's city or phone, and incremental returns only filings you have not seen before.

1. A Google service account

  1. In Google Cloud Console, create a project, enable the Google Sheets API, create a service account and download its JSON key as sa.json.
  2. Create a Google Sheet and share it (Editor) with the service account's email address.
  3. Copy the sheet's ID from its URL: https://docs.google.com/spreadsheets/d/<THIS PART>/edit.

2. The script

pip install apify-client gspread
import os

import gspread
from apify_client import ApifyClient

COLUMNS = ["filing_date", "company_name", "state", "industry_group", "total_amount_sold",
           "total_offering_amount", "date_of_first_sale", "website", "signer_title"]

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("aurelix/recently-funded-companies").call(run_input={
    "daysBack": 1,
    "sectors": ["technology", "health-care"],
    "minAmountSold": 500000,
    "excludeRealEstate": True,
    "incremental": True,
    "stateKey": "daily-funded-sheet",
    "maxResults": 300,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())

sheet = gspread.service_account(filename="sa.json").open_by_key(os.environ["SHEET_ID"]).sheet1
if not sheet.get_values("A1:A1"):
    sheet.append_row(COLUMNS)
sheet.append_rows([[r.get(c) if r.get(c) is not None else "" for c in COLUMNS] for r in rows],
                  value_input_option="USER_ENTERED")
print(f"added {len(rows)} new filings")
  • daysBack: 1 reads filings from today and yesterday (UTC); with incremental on, a filing already added on a previous day is skipped and not charged, so the overlap costs nothing.
  • minAmountSold keeps only companies that report at least that much already sold.
  • Run it once a day from cron, GitHub Actions or an Apify schedule.

What lands in the sheet

Real rows from a run of the tool:

company_name state industry_group total_amount_sold total_offering_amount website
Newcoda, Inc. FL Other Technology 1,265,000 1,800,000 newcoda.ai
DATA I/O CORP WA Other Technology 3,000,000 3,000,000 dataio.com
Muon Vision Inc. MA Other 200,000 200,000 muonvision.com
Provivi, Inc. CA Agriculture 3,022,267 25,000,056 provivi.com

Each record also carries the company's city, phone and year of incorporation, the type of securities sold, the number of investors, date_of_first_sale, and the executives and directors named in the filing. With enrichContacts on, companies with a confirmed website also get the business emails, phones and social pages they publish on that site.

Reading the numbers

  • total_amount_sold is what was sold by the time of filing; total_offering_amount is the size of the whole offering. A gap between them often means the round is still open.
  • Amounts are copied as filed, so placeholder values such as 1 appear when the issuer entered them. Filter on minAmountSold to skip those.
  • A company files within 15 days of its first sale, so the filing usually follows the raise by days to two weeks; date_of_first_sale gives the real date.

Limits

  • US filers only, and only companies that file a Form D. There are no investor names and no round names (seed, Series A); Form D does not carry them.
  • Most small issuers get no website: one is returned only when the company name works as a .com, .ai, .io or .co domain and the site confirms the filing.

Links

Tools used