Snapshot DAO Governance Scraper
Pricing
from $3.00 / 1,000 results
Snapshot DAO Governance Scraper
Scrape Snapshot.org DAO governance data - proposals (by space, state, or ID), spaces (DAO profiles), and votes (by proposal or voter address). Public GraphQL API, no login required.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Snapshot.org DAO governance data — proposals, spaces (DAOs), and votes — for any of the tens of thousands of DAOs that use Snapshot for off-chain voting (ENS, Aave, Uniswap, Arbitrum, Optimism, and thousands more). HTTP-only via the public hub.snapshot.org/graphql API. No login, no API key, no cookies.
What this actor does
- 6 modes:
proposals,proposalByIds,spaces,spaceByIds,votes,votesByVoter - Proposal search: by space/DAO, voting state (pending/active/closed), title text, network, author address, voting type, min vote count
- Space discovery: search DAOs by name, filter to verified spaces, sort by creation date (see FAQ on sort reliability)
- Vote-level data: every vote on a proposal, or every vote cast by a specific wallet address
- Empty fields are omitted
Output per record
Fields vary by recordType:
- proposal —
proposalId,title,body,spaceId,spaceName,state,type,choices[],scores[],scoresTotal,votesCount,author,network,symbol,quorum,startDate,endDate,createdDate,updatedDate,snapshotBlock,proposalUrl - space —
spaceId,name,about,network,symbol,membersCount,adminsCount,followersCount,proposalsCount,votesCount,verified,turbo,private,website,twitter,github,coingecko,createdDate,avatarUrl,spaceUrl - vote —
voteId,voter,proposalId,proposalTitle,spaceId,choice,votingPower,vpState,reason,createdDate,voterProfileUrl,voterAvatarUrl,proposalUrl
Every record also carries recordType and scrapedAt.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | proposals | One of the 6 modes above |
space | string | – | DAO/space ENS name (mode=proposals, narrows votesByVoter). Omitted = all spaces |
state | string | any | pending / active / closed (mode=proposals) |
titleContains | string | – | Substring match on proposal title (mode=proposals) |
network | string | – | Chain ID filter, e.g. 1, 137, 42161 |
authorAddress | string | – | Only proposals created by this 0x wallet address (mode=proposals) |
proposalType | select | any | Voting system: single-choice / approval / quadratic / ranked-choice / weighted / basic (mode=proposals) |
minVotes | int | – | Minimum vote count (mode=proposals) |
proposalOrderBy | string | created | created / votes / scores_total_value* / start / end |
proposalIds | array | – | Proposal IDs (mode=proposalByIds) |
searchText | string | – | Space name search (mode=spaces). Omitted = browse all spaces |
verifiedOnly | bool | false | Only Snapshot-verified spaces (mode=spaces) |
spaceOrderBy | string | created | followersCount* / proposalsCount* / votesCount* / created |
spaceIds | array | – | Space IDs (mode=spaceByIds) |
voteProposalId | string | – | Proposal ID to fetch votes for (mode=votes) |
voterAddress | string | – | Wallet address (mode=votesByVoter) |
minVotingPower | number | – | Minimum voting power filter |
voteOrderBy | string | created | created / vp |
orderDirection | string | desc | desc / asc |
maxItems | int | 25 | Hard cap on emitted records |
proxyConfiguration | object | AUTO | Optional; only used as an automatic fallback on 403/429 |
Example: active ENS DAO proposals
{ "mode": "proposals", "space": "ens.eth", "state": "active", "maxItems": 20 }
Example: approval-vote proposals by a specific author
{ "mode": "proposals", "authorAddress": "0x66a28531E6f390A8CD44aB0C57a0F1aeb7E673FF", "proposalType": "approval", "maxItems": 20 }
Example: search for DAOs
{ "mode": "spaces", "searchText": "uniswap", "verifiedOnly": false, "maxItems": 20 }
Example: votes on a specific proposal
{ "mode": "votes", "voteProposalId": "0xa736ce4411be14ceaab141989ac271ce1ca96aee6d3ac26bb893ec3c898385d0", "maxItems": 50 }
Example: a wallet's voting history
{ "mode": "votesByVoter", "voterAddress": "0x1F3D3A7A9c548bE39539b39D7400302753E20591", "maxItems": 50 }
Use cases
- Governance dashboards — track proposal activity and outcomes across one or many DAOs
- DAO research — compare voter participation, quorum, and voting-power concentration
- Delegate/voter analytics — audit a wallet's full cross-DAO voting history
- Alerting — poll
state=activeproposals to notify token holders before voting closes - DAO discovery — search/filter DAOs by name, network, and verification status
FAQ
Do I need a Snapshot or wallet account? No. Every endpoint used here is Snapshot's public, unauthenticated GraphQL API (hub.snapshot.org/graphql).
What's a "space"? Snapshot's term for a DAO's individual voting hub, identified by an ENS name (e.g. ens.eth, aavedao.eth).
What do scores[] and choices[] mean? They're parallel arrays — scores[i] is the total voting power behind choices[i]. scoresTotal is the sum across all choices.
What is choice on a vote record? Depends on the proposal type: a single number (single-choice), a list of numbers (ranked-choice/approval), or an object mapping choice index to weight (weighted/quadratic voting).
What's votingPower (vp)? The voter's token/strategy-weighted voting power at the proposal's snapshot block — not a simple 1-address-1-vote count.
How fresh is the data? Near-real-time — Snapshot's hub indexes proposals and votes as they're submitted on-chain/off-chain.
Is there a rate limit? Yes — Snapshot's public API allows 100 requests/minute without an API key. The actor backs off automatically on 429s.
Why does spaceOrderBy=followersCount/proposalsCount/votesCount (marked with *) sometimes look unsorted? These are computed/aggregate fields on Snapshot's backend, and its own public GraphQL API does not reliably honor a server-side sort on them (confirmed by testing the raw API directly, independent of this actor) — it silently falls back to its own created-date order instead of erroring. The same applies to proposalOrderBy=scores_total_value. This is an upstream API limitation, not a bug in this actor: every record returned is still complete and correct, it just may not be arranged in the order you requested for these specific fields. created, votes, start, end (proposals) and created, vp (votes) all sort correctly server-side.