Insights
FDA Advisory Committee Vote Database for Event Studies
Alphanume Team · August 21, 2026
Use an FDA advisory committee vote database to define dated biotech events from official tallies, while keeping panel advice separate from the FDA's later decision.
Alphanume's FDA Advisory Committee Votes dataset covers drug and biologic advisory committee meetings from January 1, 2024 forward. It stores one row per vote question, with yes, no, and abstain counts read from official minutes, the question's product-favorable answer resolved, and links back to FDA materials. Announced meetings are retained as a forward calendar, including meetings that have not produced a tally.
That makes it suitable for event studies, but not for approval forecasts or medical advice. An advisory committee is a panel of outside experts. Its vote informs the agency and is not the FDA's final action. The dataset's decision fields are currently empty by design because meeting materials generally predate the later agency decision. A researcher must obtain and time that later outcome separately.
Read the vote record as a data contract
Field | Event-study meaning | Important caveat |
|---|---|---|
date | Meeting start date and event anchor | Multi-day meetings also have meeting_end_date |
meeting_key and vote_seq | Unique meeting group and within-meeting vote order | vote_seq 0 is a no-tally meeting record |
vote_yes, vote_no, vote_abstain | Counts read from official minutes | Recent minutes can be unpublished, leaving counts null |
favorable_answer | Which answer favors the product | A yes vote is not always product-favorable |
vote_outcome_favorable | 1 won, 0 lost, null undetermined | Null includes ties, non-directional questions, and no tally |
minutes_url | Primary source for checking the tally | Null until the FDA posts minutes |
The polarity fields prevent a common error. One committee may vote on whether benefits outweigh risks, where yes is favorable. Another may vote on whether use should be restricted, where no can be favorable. Counting raw yes votes across questions without reading favorable_answer mixes opposite outcomes.
Retrieve historical tallies without dropping the denominator
The endpoint is GET /v1/biotech/advisory-committees. Filters include committee, meeting status, topic type, vote evidence, tally availability, favorable outcome, drug, sponsor, asset, application, meeting key, and date. Results arrive as { "count": N, "data": [...] } and are ordered by descending date, then meeting key and vote sequence. V1 does not paginate this dataset.
import os
import requests
response = requests.get(
"https://api.alphanume.com/v1/biotech/advisory-committees",
headers={"X-API-Key": os.environ["ALPHANUME_API_KEY"]},
params={
"date_gte": "2024-01-01",
"meeting_status": "held",
"has_tally": "true",
},
timeout=30,
)
response.raise_for_status()
votes = response.json()["data"]The has_tally=true filter is useful for measuring vote outcomes, but it should not define overall meeting coverage. Meetings with no numeric tally remain as vote_seq=0 rows, and vote_evidence explains whether minutes are not posted, no vote was held, or the meeting did not occur. Build a separate coverage table from all meeting records before filtering to tallies.
Structure the event table before adding prices
A clean study has one observation per research unit. If the question concerns individual vote questions, keep record_id. If it concerns meetings, aggregate within meeting_key using a rule written before returns are loaded. Do not silently select the most favorable question from a meeting with several votes.
meeting_events = (
vote_rows
.query("vote_seq > 0")
.groupby("meeting_key", as_index=False)
.agg(
meeting_date=("date", "first"),
committee=("committee_abbrev", "first"),
question_count=("record_id", "count"),
favorable_wins=("vote_outcome_favorable", lambda s: (s == 1).sum()),
favorable_losses=("vote_outcome_favorable", lambda s: (s == 0).sum()),
undetermined=("vote_outcome_favorable", lambda s: s.isna().sum()),
)
)
assert meeting_events["meeting_date"].notna().all()Ticker mapping is not provided. The source stores sponsor company, drug name, application identifiers, and a normalized asset_key for grouping repeat appearances. Mapping a sponsor to a traded security is a separate, time-sensitive step, especially for partnerships, subsidiaries, acquisitions, and private sponsors. Save that mapping with its effective date instead of treating today's ticker as timeless.
Avoid the main event-study failure modes
- Late minutes. FDA minutes can arrive months after a meeting. The tally was public at the meeting, but this database row may be completed later, so distinguish event time from database update time.
- Advice versus decision. Do not label a favorable panel outcome as FDA approval. Join final decisions from a separately timed source.
- Selection bias. Do not keep only meetings with clean numeric tallies. Report the no-tally and undetermined counts.
- Question multiplicity. A meeting can contain several votes. Define whether the unit is a question, meeting, asset, or sponsor.
- Price timing. Choose a close-to-close or open-to-close window based on when the vote became public, then apply it consistently.
Sparse meetings also make short access windows easy to misread. Free access covers a trailing 20-trading-session delayed window, and there may be no meeting inside it. An empty response can therefore be valid. The field and filter documentation explains meeting statuses and evidence values before a historical pull.
Run one auditable event-study slice
Start with held meetings from one committee and export three files: all meeting records, numeric vote-question rows, and the predefined meeting-level aggregation. Check every included tally against minutes_url. Then attach one forward return window with a documented timestamp rule and report favorable wins, losses, undetermined outcomes, missing ticker mappings, and missing prices separately.
Explore the live contract on the FDA Advisory Committee Votes dataset page. For adjacent biotech events that are agency actions rather than panel advice, use the FDA Response Events dataset as a separate cohort. Do not merge the two event types until each has its own date rule and source audit.