Form D fundraise tracker for Google Sheets and Slack

Catch every new Form D private placement the moment it hits SEC EDGAR, log it to a Google Sheet, and digest the day's deals to Slack.

Deterministic Code
SEC EDGARGoogle SheetsSlack BotSalesFinanceResearch & MonitoringNotifications & AlertsLead Enrichment

Build a code workflow that tracks brand-new SEC Form D private placement filings, logs each one to a Google Sheet, and posts a digest of new filings to Slack.

Trigger: cron, every 30 minutes Monday through Friday between 6:00am and 9:00pm America/New_York. Persist the last successful run timestamp between runs so the next run only pulls filings dated on or after it (on the very first run, default to looking back 30 minutes).

Step 1: Call sec-edgar Full-Text Search Filings with forms=D and a date filter set to the last successful run timestamp. Send a descriptive User-Agent header per SEC EDGAR's fair-access rules. Page through results if there are more than the default page size.

Step 2: For each hit, extract company name, CIK, filing date, accession number, and the industry / SIC description when it is present in the hit metadata. Build the filing HTML link from the documented Archives URL pattern: https://www.sec.gov/Archives/edgar/data/{CIK}/{ACCESSION_NO_NODASHES}/{primaryDocument}, where CIK is unpadded and the accession number has its dashes stripped.

Step 3: Call google-sheets Get Values against the tracker spreadsheet to read the column of accession numbers already logged. Dedupe the new hits against it so already-logged filings are dropped.

Step 4: If there are still new hits after dedupe, call google-sheets Append Values to append one row per filing in this column order: Filing Date, Company, CIK, Accession, Industry, Filing Link. Use USER_ENTERED so the link is rendered as a clickable hyperlink.

Step 5: If one or more rows were appended, call slackbot Send a Message once to post a single digest to the #deal-flow channel that lists every newly added company with its filing link, formatted as Slack mrkdwn (one bullet per filing with <link|Company Name>). If zero rows were appended, skip the Slack call entirely so quiet runs stay quiet.

Configurable inputs: the Google Sheet ID and tab name, the Slack channel, the User-Agent string for SEC EDGAR, and the cron schedule. Default the channel to #deal-flow.

Additional information

What does this prompt do?
  • Watches SEC EDGAR for newly filed Form D fundraises every 30 minutes Monday through Friday during U.S. business hours.
  • Logs each new filing to a Google Sheet with the company name, filing date, industry, and a direct link to the filing.
  • Posts a single Slack digest to your deal-flow channel listing the new companies and links, so the whole team sees fresh raises in one place.
  • Stays quiet on runs with nothing new, so your channel never fills up with empty pings.
What do I need to use this?
  • A Google account with edit access to the spreadsheet you want filings logged into.
  • A Slack workspace and the channel you want the digest posted to.
  • A spreadsheet with a header row covering filing date, company, CIK, accession, industry, and filing link.
How can I customize it?
  • Change how often it runs, for example every 15 minutes during market hours or only at the morning open.
  • Swap the destination Slack channel, or send the digest as a DM to a specific person instead.
  • Filter the filings before logging, for example only certain industries, states, or fundraise sizes.

Frequently asked questions

What is a Form D filing?
Form D is the notice a private company files with the SEC when it raises money from investors in an exempt offering. The notice is usually filed within 15 days of the first closing, which makes it one of the earliest public signals of a new fundraise.
How fresh is the data?
Filings show up in this workflow within about 30 minutes of being submitted to the SEC during business hours, so your team sees raises shortly after they become public.
Will it post the same filing twice if it runs again?
No. Every filing has a unique accession number, and the workflow checks the sheet first to skip anything already logged before writing the new row.
Can I send the digest to a private Slack channel?
Yes. Add the bot to the private channel and point the workflow at it. The digest will post there the same way it would in a public channel.
What happens on runs with no new filings?
The workflow stays quiet. You only get a Slack message when there is actually a new fundraise to share, so the channel does not fill up with empty status updates.

Stop refreshing EDGAR for new fundraises.

Connect SEC EDGAR, Google Sheets, and Slack once, and Geni watches Form D filings for your deal-flow team all business day.