Development preview · 0.1.0.dev8

Civic records,
with their source.

Bring meeting data into your application without losing where it came from. QuorumRelay connects fragmented civic sources through one bounded engine.

Python SDK · CLI · HTTP · MCP · TypeScript client

ONE ENGINE / MANY SOURCES01 — 03
01 / SOURCEMeeting portalsAgendas · minutes · media
capture + identity
02 / QUORUMRELAYNormalize & preserveRaw evidence stays connected to the result.
sourcecoveragerecords
bounded result
03 / YOUR APPLICATIONUse the data your waySearch · export · review

Illustrative workflow · actual coverage varies by provider.

31provider families
34baseline formats
28additional parsers

These counts describe the current roster, not complete operation coverage for every provider. See the coverage map →

THE PROBLEM

The record is more than the text.

Meeting information arrives as vendor APIs, public pages, saved responses and attachments. A useful integration needs to carry the identity, capture and limits along with the normalized fields.

QuorumRelay gives applications a shared path from configured sources to usable records, while leaving editorial and canonical decisions with the application.

A SHARED WORKFLOW

From source to
something useful.

Use saved captures or supported bounded reads. Keep the complete result, including its coverage and errors.

01

Discover & retrieve

Read configured sources within explicit dates and limits. Fetch documents or recordings selected from captured relationships.

02

Preserve & normalize

Retain original captures, source identities, citations and unknown fields alongside normalized records.

03

Use & review

Search available fields, export portable bundles, and let your application decide what to save or publish.

BUILT FOR INTEGRATION

One engine.
Several ways in.

Call the same operations in process or across a service boundary. The engine does not depend on any one reference product.

Explore the interfaces →
PYTHON / SDKexample
from quorumrelay import create_engine

engine = create_engine()
result = engine.execute("providers", {})

# Keep status, coverage, and errors.
print(result.status)
print(len(result.data["providers"]))
The SDK, CLI, HTTP and MCP share result contracts.

CAPABILITIES & BOUNDARIES

Useful by design.
Honest about limits.

Search what is actually available

Search captured metadata and supplied text. Thirteen provider adapters also expose bounded native search; their fields and coverage differ.

Move evidence, not just fields

Use neutral JSON, JSONL and ZIP interchange. CSV and iCalendar projections report their losses.

Writes require a deliberate decision

Supported write adapters use explicit scoped policy, server-owned credentials, a reviewed exact plan and a receipt. Live provider write acceptance is still deferred.

CURRENT STATUS

A development preview,
not a promise of completeness.

Provider coverage is uneven. Some reads need credentials, a guarded browser session or supplied captures; complete catalogs, account access and live writes have not been accepted for every provider.

Read the coverage and remaining gaps →

START BUILDING

Keep the evidence
in the picture.

Explore the manual, then choose the interface that fits your application.