Decidim Participation Extractor: Proposals, Processes, Meetings avatar

Decidim Participation Extractor: Proposals, Processes, Meetings

Pricing

from $0.35 / 1,000 records

Go to Apify Store
Decidim Participation Extractor: Proposals, Processes, Meetings

Decidim Participation Extractor: Proposals, Processes, Meetings

Extract processes, assemblies, proposals, results or meetings from any Decidim participatory-democracy site as JSON rows with state, votes, dates and page URL. $0.0005 per record (free plan).

Pricing

from $0.35 / 1,000 records

Rating

0.0

(0)

Developer

Datamule

Datamule

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

11 days ago

Last modified

Share

Decidim Participation Extractor

Extract participatory-democracy data from any Decidim instance (city, regional and EU government deployments) through its public GraphQL API: participatory processes, assemblies, proposals, results and meetings, one flat JSON row each. For civic-tech teams, policy researchers, journalists and govtech analysts. Price: $0.0005 per record on the free plan ($0.50 per 1,000), lower on higher Apify plans; no start fee.

Empty {} input reads https://meta.decidim.org (the Decidim project's own instance) in participatoryProcesses mode and returns real rows (a real run returned 15 records, about $0.0075). Only Decidim hosts work; other platforms fail fast with a clear error and no fabricated output.

Pick the right mode

ModeReturnsLevel
participatoryProcesses (default)processes (budgets, plans, consultations)space
assembliesassemblies / councilsspace
proposalscitizen proposals with state and vote countcomponent
resultsaccountability results with progress %component
meetingsmeetings with times and addresscomponent

Example input

{
"decidimUrl": "https://meta.decidim.org",
"mode": "proposals",
"locale": "en",
"maxRecords": 20
}

Example output

Real row (mode: "proposals", selected fields):

{
"decidimUrl": "https://meta.decidim.org",
"mode": "proposals",
"id": "12040",
"reference": "MDC-PROP-2017-09-12040",
"state": "finished",
"voteCount": 9,
"title": "Reconeixement automàtic de links",
"titleLocale": "ca",
"createdAt": "2017-09-05T14:20:20+02:00",
"processId": "40",
"processSlug": "roadmap",
"componentId": "122",
"pageUrl": "https://meta.decidim.org/processes/roadmap/f/122/proposals/12040"
}

Output fields

decidimUrl, mode, id, slug, pageUrl, reference, title, titleLocale, subtitle, shortDescription, body, state, progress, voteCount, address, closed, promoted, createdAt, updatedAt, publishedAt, answeredAt, startDate, endDate, startTime, endTime, componentsCount, components (with withComponents: true), processId, processSlug, componentId. Fields not applicable to a mode are null.

Limits

  • Cost = records x $0.0005 (free plan). maxRecords defaults to 2000 (about $1.00); use 5-20 for a first run on a new instance.
  • Some large instances block cloud IPs (403) or time out during component discovery; the run then fails with a clear error rather than returning partial data.
  • Component modes search participatory processes only (not assemblies). pageSize is capped near 100.

Use from an AI agent / API

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("datamule/decidim-participation-extractor").call(
run_input={"decidimUrl": "https://meta.decidim.org", "mode": "proposals", "maxRecords": 20},
max_total_charge_usd=0.05, # hard cost cap for the run
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

MCP (Claude, Cursor, any MCP client): add https://mcp.apify.com/?tools=datamule/decidim-participation-extractor as a remote MCP server with your Apify token as a Bearer header. The Actor then appears as one tool whose arguments are the input fields above; call it with the example input.

Agent rules: pass JSON matching the input schema; {} is valid and returns real default data; always set a maximum charge per run; read results from the run's default dataset (one row per result).

FAQ

Does it work on any Decidim site? Yes, if the instance exposes its public /api GraphQL endpoint and does not block cloud IPs. Why is title in another language? The requested locale is missing, so it falls back to the first available translation; see titleLocale. What does {} do? Lists participatory processes of meta.decidim.org.

Key behaviours (things the Decidim API decides)

  • Translated text with fallback. title / subtitle / body are translated objects, not strings. On a Catalan or Finnish instance en is often null, so the actor falls back to the first available translation and tells you which locale it used in titleLocale. Rows are keyed on the always‑present id.
  • Components are reached through inline fragments. proposals / results / meetings are components of a participatory process, not root fields — the actor discovers them and walks each component's Relay cursor connection.
  • Not every host is Decidim. The actor first probes { decidim { version } }; a host that is unreachable, Cloudflare‑gated (403 / HTML), or a different platform (e.g. CONSUL) fails fast and never emits a fabricated empty result.

Every row has a clickable pageUrl (the "Page link" column in the Output table) that opens the record on the Decidim site: /processes/<slug> or /assemblies/<slug> for spaces, /processes/<processSlug>/f/<componentId>/<mode>/<id> for proposals, results and meetings. It is built from the ids already in the row, so it costs no extra request. It is null when the instance did not return the slug it needs. Component links always use /processes/, because the Actor finds proposals, results and meetings under participatory processes (not assemblies).

Pricing

Pay‑per‑event: you are billed per record (one participatory process, proposal, result, assembly, or meeting emitted).

Your run's maximum cost is respected. The Actor checks the budget before its first Decidim request and before every page, stops when the next record would go over the limit, and keeps what was already delivered. You are only charged for records that land in your dataset. If a page request fails mid-run, the delivered records stay but the run is marked failed.

Use cases

Civic‑transparency dashboards · participatory‑budgeting analytics · policy research · govtech monitoring · journalism on public participation · comparative studies across the ~400‑instance Decidim ecosystem.