Public Company Earnings Dates and Reporting Window Finder
Pricing
from $5.10 / 1,000 company resolveds
Public Company Earnings Dates and Reporting Window Finder
Finds when a public company reports. Give it a domain, ticker, ISIN, LEI or CIK and get back fiscal year end, reporting cadence, next reporting date, days to event, and the open and close of the outreach window, as one flat row per company built for Clay. Timing rows cover US companies only.
Pricing
from $5.10 / 1,000 company resolveds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
🧭 What can Public Company Earnings Dates and Reporting Window Finder do?
Give it a domain, ticker, ISIN, LEI or CIK and it tells you when that public company reports, and when to reach out around it. One flat row per company, built to drop into a Clay column.
Most tools tell you a company is public. This one tells you the fiscal year end, the reporting cadence, the next reporting date, how many days away it is, and the open and close of an outreach window you define yourself.
| 📦 What you get | ⚙️ Features and integrations |
|---|---|
🏢 44 identity fields in resolve, 47 in qualify, 46 in universe📅 75 fields in timing mode🎯 outreach_window_open and outreach_window_close, your lead and lag🧾 null never missing, every field always present | 🔑 Five identifier types: domain, ticker, ISIN, LEI, CIK 🇺🇸 Timing from SEC filing history, US companies 🧊 24 hour identity cache, timing never cached ⬇️ Export to JSON, CSV, Excel, HTML or XML |
Bought by outbound teams timing their sequences around earnings, by investor relations and finance researchers, and by anyone who needs a reporting calendar keyed to identifiers they already have.
🇺🇸 Timing rows cover US companies only. Identity, venue and classification resolve worldwide, across 10,646 publishable companies. The reporting dates come from US SEC filing history and exist for US companies alone. If you send a European or UK company to
timingmode, you get its identity and a stated reason, never a guessed date.
💡 Why use this actor?
| If you want | Read these fields |
|---|---|
| The next reporting date | next_event_date, next_event_type, next_event_period |
| To time outreach around it | outreach_window_open, outreach_window_close, window_status, days_to_event |
| To know how much to trust the date | confidence_band, confidence_effective, next_event_source_rung |
| The reporting rhythm | derived_cadence, cadence_confidence, cadence_observation_count |
| The fiscal calendar | fiscal_year_end_mmdd, fiscal_year_end_month, is_non_calendar_fiscal_year |
| Company identity | legal_name, primary_ticker, isin, lei, cik, domain |
| Venue and classification | primary_exchange_code, country_code, sector, security_type |
| To tell empty from broken | match_method, timing_unavailable_reason, domain_absent_reason |
📏 A predicted date is labeled as one
next_event_is_estimate and next_event_is_announced sit on every timing row. A date derived
from filing history is an estimate, and the actor says so on the row rather than in the
documentation. confidence_band and confidence_effective tell you how much history sat behind
it.
The bands sit at 0.80 and 0.50. At or above 0.80 is strong, 0.50 to 0.80 is moderate,
below 0.50 is weak. Confidence is computed on the weakest link in the chain: a date is only
as good as the cadence it was derived from, so confidence_effective is the minimum of the event
and cadence confidences, never an average. Because of that minimum, the 0.75 to 0.80 band is
empty by construction. A gap in the distribution is arithmetic, not missing data.
📋 What data does it extract?
Field counts are per mode, measured against live runs: resolve 44, qualify 47 with
its three verdict fields, universe 46, timing 75, and season 19, which are
aggregate rows rather than company rows. Within a mode every field is always present. A field with
nothing behind it is null, never absent, so a Clay column never shifts.
Identity and venue: company_id, legal_name, normalized_name, primary_ticker, isin,
lei, cik, domain, primary_exchange_code, country_code, currency, market_segment,
listing_count, all_exchange_codes, is_cross_listed, sector, security_type,
is_operating_company, is_foreign_private_issuer, is_us_registrant, is_blank_check,
is_depositary_receipt, public_float_usd, public_float_band, shares_outstanding.
Timing: fiscal_year_end_mmdd, derived_cadence, next_event_date, next_event_type,
next_event_period, next_event_is_estimate, next_event_is_announced, days_to_event,
outreach_window_open, outreach_window_close, window_status, constrained_period_open,
constrained_period_close, is_in_constrained_period, confidence_band,
timing_unavailable_reason.
Provenance on every row: data_as_of, snapshot_built_at, contract_version,
provenance_source, provenance_confidence, attribution, license, source_surface.
🛠️ How to find a company's next reporting date
- Pick a mode.
resolvefor identity,timingfor reporting dates and windows,universeto list companies matching a filter,seasonfor aggregate reporting volume by week or month,qualifyto test companies against filters. - Give it identifiers:
company_domains,tickers,isins,leis,ciksorcompany_names. Mix types freely in one run, up to 1,000 per run. - For
timing, setwindow_lead_daysandwindow_lag_days. They default to 70 and 42, which opens the window ten weeks before the reporting date and closes it six weeks after. - Run it. Every input gets exactly one row back, in the same shape, whether it matched or not.
💵 How much does it cost?
Pay per event. You are charged for rows returned, not for rows you filtered out.
| Event | Price |
|---|---|
| Company resolved | $0.006 per row |
| Timing row returned | $0.012 per row |
| Reporting season aggregate | $0.05 per row |
| Actor start | $0.00005 per run |
Volume discounts of 5, 10 and 15 percent apply on the Apify Bronze, Silver and Gold plans.
A row that resolves nothing is still billed. An identifier that matches no public company
comes back with match_method set to no_match and every other field null. That is a real
answer, the actor made a real request to produce it, and a documented null is worth more than a
silent gap. If you do not want to pay for misses, filter your input before you send it.
Timing rows are billed per row and exist for US companies only. A non US company sent to
timing mode returns its identity and a timing_unavailable_reason, and is billed as a timing
row because the work was done.
Not charged: rows dropped by a filter you set, and every row in a run that fails input
validation. A rejected input emits no rows and charges no row event. The platform's own
apify-actor-start event still applies, at one per run, because it is levied before the actor
validates anything.
The truncation notice is a row you are not charged for. When universe or season matches
more than your limit, one extra row comes back carrying total_matched and no company, so the
shortfall is visible rather than silent. It is not billed: a limit of 5 against a larger match
returns 6 rows and charges 5.
⌨️ Input
| Field | Type | Notes |
|---|---|---|
mode | string | resolve, qualify, timing, universe, season |
company_domains, tickers, isins, leis, ciks, company_names | array | Up to 1,000 identifiers per run |
window_lead_days, window_lag_days | string | Outreach window, defaults 70 and 42 |
country_codes, exchange_codes, sectors, security_types | array | Universe and qualify filters |
cadences, fiscal_year_end_months | array | Reporting rhythm filters |
season_from, season_to, season_group_by, season_split_by | string | Season mode window and grouping |
min_provenance_confidence | string | any or high |
limit | string | Rows to return, default 1,000 |
📤 Output
One flat row per input, one JSON object per row, all fields always present.
{"matched_on": "ticker","matched_value": "TXG","legal_name": "10x Genomics, Inc.","primary_ticker": "TXG","cik": "0001770787","primary_exchange_code": "XNAS","country_code": "US","derived_cadence": "quarterly","next_event_type": "quarterly_results","next_event_date": "2026-11-03","next_event_is_estimate": true,"days_to_event": 77,"outreach_window_open": "2026-08-25","outreach_window_close": "2026-09-22","window_status": "not_yet","confidence_band": "strong","data_as_of": "2026-08-17"}
💡 Tips
Read window_status before next_event_date. It is open, not_yet, closed_passed or
no_event against today, and it is the field you filter a Clay table on. no_event is the
state a company lands in when there is no reporting event to build a window from, which is
every non US company.
Set the window to your sales cycle. window_lead_days and window_lag_days are yours. A
long enterprise cycle wants a wider lead than the default 70 days.
Use universe mode to build the list, then timing to time it. universe returns every
company matching a filter, paging through the whole match rather than stopping at the first page.
⚠️ Known limits
Timing is US only. Reporting events come from SEC filing history. Non US companies resolve
fully for identity, venue and classification and return a stated
timing_unavailable_reason in timing mode. No date is invented for them.
Unknown cadence is refused, not guessed. 922 companies in the universe have no derivable
reporting cadence, because their filing history is too short or too irregular to support one. The
actor returns derived_cadence null with a reason instead of inventing a date. A wrong date that
looks right is worse than no date.
864 companies have no publishable representation and cannot be returned at all. They exist in the market and not in the redistributable surface this actor reads.
Dates are predicted, not announced. next_event_is_estimate is true for a predicted date and
next_event_is_announced is true only when the event is a confirmed one. Treat an estimate as an
estimate.
Identity is cached for 24 hours, timing never is. days_to_event, window_status and
is_in_constrained_period change every day by construction, so a cached window would be a wrong
window. There is no flag to turn timing caching on.
Attribution ships only where the result set requires it. The attribution and license
fields carry the acknowledgment a row's source requires, and the run level attribution list holds
only the strings the rows you actually received need. A result set with no rows from a given
source does not claim that source's acknowledgment.
❓ FAQ
Which identifier should I send? Whichever you already have. Ticker and CIK are the most
precise, domain is the most common in a GTM table, and name matching is the loosest. matched_on
tells you which one produced the row.
Can I send 5,000 companies? Send up to 1,000 identifiers per run. universe mode pages
through matches larger than that and returns the whole set.
What is the constrained period? The stretch before a reporting date when a company's investor
relations team is least available. constrained_period_open, constrained_period_close and
is_in_constrained_period mark it so you can avoid it or target it deliberately.
Why did a company I know is public come back no_match? Either the identifier does not
appear on the publishable surface, or the company is one of the 864 with no publishable
representation. match_method and domain_absent_reason say which.
How fresh is the data? data_as_of and snapshot_built_at ship on every row. Read them
rather than assuming.
🧩 Want other GTM data?
Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.
🛠️ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.
🆘 Support
A company timed wrongly, or an identifier that should have matched? Open an issue on the Issues tab with the input and the rows, and we will look at it.
ℹ️ Sourcing and legal. Company identity, venue and classification come from openly published reference sources, and reporting events from US SEC filing history. Every row carries its
provenance_source,provenance_confidenceand, where the source requires one, itsattributionstring andlicense. The actor emits company identity, venue, classification and reporting dates. It holds no personal data and returns none. You are responsible for how you use the output.
Built by Mamba Labs.