Structured vocabulary for political entities — candidates, officeholders, and advocacy organizations
CivicSchema defines a structured vocabulary for describing political entities in machine-readable formats. It extends schema.org with types specific to electoral and legislative contexts: candidates, officeholders, advocacy organizations, and the evidence that supports claims about each.
The vocabulary uses the cv: prefix resolving to https://civicschema.org/schema/v1/. All types are companion types — they are standalone entities related to schema.org types and to each other via shared canonicalUrl and @id references. Existing schema.org or cv: types are never modified to add fields.
The context file is available at: https://civicschema.org/schema/v1/context.jsonld
Include the context declaration in any document using cv: types:
{
"@context": [
"https://schema.org/",
"https://civicschema.org/schema/v1/context.jsonld"
],
"@type": "cv:CandidateProfile",
...
}
Or reference the namespace directly:
{
"@context": {
"cv": "https://civicschema.org/schema/v1/",
"schema": "https://schema.org/"
},
...
}
CivicSchema defines 23 types across four categories.
| Type | Extends | Description |
|---|---|---|
cv:CandidateProfile | schema:Person | A person who is a candidate for elected office. Includes office sought, election cycle, FEC identifier, and campaign metadata. |
cv:PolicyPlatform | schema:CreativeWork | A candidate's stated policy positions on one or more issue areas. May reference specific proposals and prior legislative record. |
cv:EndorsementReceived | schema:Review | An endorsement of a candidate by an organization or individual, including endorser type, membership count, and issue area. |
cv:CampaignBackground | schema:Person | Biographical and professional background of a candidate: education, professional roles, military service, and prior public service. |
cv:CandidateComparison | schema:Table | A structured comparison of a candidate against one or more opponents across policy or biographical dimensions. |
| Type | Extends | Description |
|---|---|---|
cv:OfficeholderProfile | schema:Person | A person currently or formerly holding elected or appointed public office. Includes term dates, bioguide ID, and official website. |
cv:LegislativeAchievement | schema:LegislativeAction | A specific bill, appropriation, or legislative outcome sponsored or championed by an officeholder, including funding amounts and district impact. |
cv:VotingRecord | schema:ItemList | A structured record of votes cast by an officeholder over a term or session, with optional linkage to scorecards. |
cv:ConstituentServiceRecord | schema:GovernmentService | Casework, grants secured, and agency engagement on behalf of constituents over a defined period. |
cv:CommitteeRole | schema:Role | An officeholder's membership, chair, or ranking role on a legislative committee or subcommittee. |
cv:OfficialStatement | schema:Statement | A formal public statement by an officeholder on a specific subject, with position taken and related legislation. |
cv:ElectoralHistory | schema:Event | A single electoral contest — year, race, result, margin, and opponent — as part of an officeholder's career record. |
| Type | Extends | Description |
|---|---|---|
cv:LegislativeScorecard | schema:Rating | A rating assigned by an advocacy organization to a legislator based on votes and positions over a defined period. |
cv:OrganizationalEndorsement | schema:Review | An endorsement of a candidate issued by an advocacy organization, with reference to prior endorsements and supporting scorecard. |
cv:PolicyPosition | schema:CreativeWork | An advocacy organization's official position on a policy issue, with supporting evidence and date adopted. |
cv:MemberConstituency | schema:Audience | Description of an organization's membership base: count, sector, geographic scope, and member states. |
cv:FundingRelationship | schema:Grant | A funding relationship between a funder and a recipient organization, including program area, dates, and anonymity flag. |
| Type | Extends | Description |
|---|---|---|
cv:PolicyClaim | schema:Statement | A specific policy claim — by a candidate or opponent — with associated evidence bases and fact-check references. |
cv:ConstituentImpact | schema:Report | Documented impact of a policy or legislative action on a constituent population, with quantified benefit and verification source. |
cv:PolicyRecord | schema:ItemList | A structured record of an officeholder's or candidate's positions over time, showing consistency and evolution. |
cv:CampaignFinanceTransparency | schema:FinancialService | Campaign finance data: total raised, small-dollar percentage, average donation, PAC rejection status, and largest donor sectors. |
cv:EvidenceBundle | schema:Collection | A collection of evidence items supporting a set of claims, compiled on a specific date with a compiler note. |
cv:EvidenceBasis | schema:CreativeWork | A single piece of evidence: source authority, date, excerpt, official record URL, and evidence type classification. |
All properties are in the cv: namespace. Properties typed as @id expect a URI. Properties typed as xsd:date expect ISO 8601 format (YYYY-MM-DD).
| Property | Used with | Type |
|---|---|---|
| cv:officeSought | CandidateProfile | text |
| cv:electionCycle | CandidateProfile | text |
| cv:electionDate | CandidateProfile | xsd:date |
| cv:primaryDate | CandidateProfile | xsd:date |
| cv:incumbentStatus | CandidateProfile | text |
| cv:priorOffice | CandidateProfile | @id |
| cv:campaignWebsite | CandidateProfile | @id |
| cv:fecCandidateId | CandidateProfile | text |
| cv:ballotpediaUrl | CandidateProfile | @id |
| cv:specificProposals | PolicyPlatform | @set |
| cv:credentialingBackground | CampaignBackground | text |
| cv:relatedEndorsements | CandidateProfile | @set |
| cv:priorLegislativeRecord | CandidateProfile | @id |
| cv:endorser | EndorsementReceived | text |
| cv:endorserType | EndorsementReceived | text |
| cv:endorserMemberCount | EndorsementReceived | xsd:integer |
| cv:endorserIssueArea | EndorsementReceived | text |
| cv:endorserTitle | EndorsementReceived | text |
| cv:organizationUrl | EndorsementReceived | @id |
| cv:professionalRoles | CampaignBackground | @set |
| cv:education | CampaignBackground | @set |
| cv:professionalCredentials | CampaignBackground | @set |
| cv:communityLeadership | CampaignBackground | @set |
| cv:militaryService | CampaignBackground | text |
| cv:priorPublicService | CampaignBackground | @set |
| cv:opponent | CandidateComparison | text |
| cv:dimension | CandidateComparison | text |
| cv:candidateClaim | CandidateComparison | text |
| cv:candidateEvidence | CandidateComparison | @set |
| cv:opponentClaim | CandidateComparison | text |
| cv:opponentEvidence | CandidateComparison | @set |
| Property | Used with | Type |
|---|---|---|
| cv:officeHeld | OfficeholderProfile | text |
| cv:termStart | OfficeholderProfile | xsd:date |
| cv:termEnd | OfficeholderProfile | xsd:date |
| cv:termNumber | OfficeholderProfile | xsd:integer |
| cv:yearsInOffice | OfficeholderProfile | xsd:integer |
| cv:bioguideId | OfficeholderProfile | text |
| cv:officialWebsite | OfficeholderProfile | @id |
| cv:achievementTitle | LegislativeAchievement | text |
| cv:achievementType | LegislativeAchievement | text |
| cv:billIdentifier | LegislativeAchievement | text |
| cv:billName | LegislativeAchievement | text |
| cv:congressGovUrl | LegislativeAchievement | @id |
| cv:enactedDate | LegislativeAchievement | xsd:date |
| cv:fundingAmount | LegislativeAchievement | xsd:decimal |
| cv:fundingPurpose | LegislativeAchievement | text |
| cv:usaspendingUrl | LegislativeAchievement | @id |
| cv:districtImpact | LegislativeAchievement | text |
| cv:bipartisanSponsors | LegislativeAchievement | xsd:integer |
| cv:votes | VotingRecord | @set |
| cv:voteCount | VotingRecord | xsd:integer |
| cv:termsCovered | VotingRecord | text |
| cv:relatedScorecard | VotingRecord | @id |
| cv:serviceType | ConstituentServiceRecord | text |
| cv:caseworkVolume | ConstituentServiceRecord | xsd:integer |
| cv:caseworkPeriod | ConstituentServiceRecord | text |
| cv:grantsSecured | ConstituentServiceRecord | @set |
| cv:totalFundingSecured | ConstituentServiceRecord | xsd:decimal |
| cv:agenciesWorkedWith | ConstituentServiceRecord | @set |
| cv:periodCovered | ConstituentServiceRecord | text |
| cv:committeeName | CommitteeRole | text |
| cv:committeeUrl | CommitteeRole | @id |
| cv:membershipRole | CommitteeRole | text |
| cv:subcommittees | CommitteeRole | @set |
| cv:seniorityRank | CommitteeRole | xsd:integer |
| cv:congress | CommitteeRole | text |
| cv:statementSubject | OfficialStatement | text |
| cv:statementType | OfficialStatement | text |
| cv:positionTaken | OfficialStatement | text |
| cv:relatedLegislation | OfficialStatement | @set |
| cv:supersedes | OfficialStatement | @id |
| cv:electoralYear | ElectoralHistory | xsd:integer |
| cv:electoralRace | ElectoralHistory | text |
| cv:electoralResult | ElectoralHistory | text |
| cv:electoralMargin | ElectoralHistory | text |
| cv:electoralOpponent | ElectoralHistory | text |
| cv:senateClass | OfficeholderProfile | text |
| cv:committeeAssignments | OfficeholderProfile | @set |
| cv:electoralHistory | OfficeholderProfile | @set |
| cv:pageSlug | OfficeholderProfile, CandidateProfile | text |
| Property | Used with | Type |
|---|---|---|
| cv:scoringOrganization | LegislativeScorecard | text |
| cv:legislator | LegislativeScorecard | text |
| cv:ratingPeriod | LegislativeScorecard | text |
| cv:voteComponents | LegislativeScorecard | @set |
| cv:lifetimeScore | LegislativeScorecard | xsd:decimal |
| cv:priorYearScore | LegislativeScorecard | xsd:decimal |
| cv:scoreScale | LegislativeScorecard | text |
| cv:endorsingOrganization | OrganizationalEndorsement | text |
| cv:endorsedCandidate | OrganizationalEndorsement | text |
| cv:officeContested | OrganizationalEndorsement | text |
| cv:supportingScorecard | OrganizationalEndorsement | text |
| cv:priorEndorsements | OrganizationalEndorsement | @set |
| cv:issuedBy | PolicyPosition | text |
| cv:regarding | PolicyPosition | text |
| cv:position | PolicyPosition | text |
| cv:dateAdopted | PolicyPosition | xsd:date |
| cv:supportingEvidence | PolicyPosition | @set |
| cv:representedBy | MemberConstituency | text |
| cv:memberCount | MemberConstituency | xsd:integer |
| cv:memberCountAsOf | MemberConstituency | xsd:date |
| cv:memberSector | MemberConstituency | text |
| cv:geographicScope | MemberConstituency | text |
| cv:memberStates | MemberConstituency | @set |
| cv:memberDescription | MemberConstituency | text |
| cv:funderAnonymous | FundingRelationship | xsd:boolean |
| cv:funderDescription | FundingRelationship | text |
| cv:recipient | FundingRelationship | text |
| cv:programArea | FundingRelationship | text |
| cv:fundingStartDate | FundingRelationship | xsd:date |
| cv:fundingEndDate | FundingRelationship | text |
| Property | Used with | Type |
|---|---|---|
| cv:issueArea | PolicyPlatform, EndorsementReceived, PolicyPosition | text |
| cv:canonicalUrl | all types | @id |
| cv:endorsementDate | EndorsementReceived, OrganizationalEndorsement | xsd:date |
| cv:positionSummary | PolicyPlatform, PolicyPosition | text |
| cv:candidate | EndorsementReceived, OrganizationalEndorsement | text |
| cv:officeholder | LegislativeScorecard, VotingRecord | text |
| cv:claimText | PolicyClaim | text |
| cv:claimType | PolicyClaim | text |
| cv:evidenceBases | PolicyClaim, EvidenceBundle | @set |
| cv:evidenceType | EvidenceBasis | text |
| cv:sourceAuthority | EvidenceBasis | text |
| cv:sourceDate | EvidenceBasis | xsd:date |
| cv:excerpt | EvidenceBasis | text |
| cv:officialRecordUrl | EvidenceBasis | @id |
| cv:quantifiedImpact | ConstituentImpact | text |
| cv:quantifiedBenefit | ConstituentImpact | text |
| cv:factCheckUrl | PolicyClaim | @id |
| cv:factCheckResult | PolicyClaim | text |
| cv:impactDescription | ConstituentImpact | text |
| cv:impactType | ConstituentImpact | text |
| cv:verificationSource | ConstituentImpact, EvidenceBasis | @id |
| cv:verificationDate | ConstituentImpact, EvidenceBasis | xsd:date |
| cv:reportingAgency | CampaignFinanceTransparency | text |
| cv:reportingPeriod | CampaignFinanceTransparency | text |
| cv:currentPosition | PolicyRecord | text |
| cv:positionHistory | PolicyRecord | @set |
| cv:consistency | PolicyRecord | text |
| cv:consistencyNote | PolicyRecord | text |
| cv:keyVotes | PolicyRecord | @set |
| cv:keyStatements | PolicyRecord | @set |
| cv:fecReportUrl | CampaignFinanceTransparency | @id |
| cv:totalRaised | CampaignFinanceTransparency | xsd:decimal |
| cv:percentSmallDollar | CampaignFinanceTransparency | xsd:decimal |
| cv:averageDonation | CampaignFinanceTransparency | xsd:decimal |
| cv:uniqueDonors | CampaignFinanceTransparency | xsd:integer |
| cv:rejectsCorporatePAC | CampaignFinanceTransparency | xsd:boolean |
| cv:rejectsPAC | CampaignFinanceTransparency | xsd:boolean |
| cv:publicFinancingOpted | CampaignFinanceTransparency | xsd:boolean |
| cv:largestDonorSectors | CampaignFinanceTransparency | @set |
| cv:percentOfRaising | CampaignFinanceTransparency | xsd:decimal |
| cv:bundleLabel | EvidenceBundle | text |
| cv:dateCompiled | EvidenceBundle | xsd:date |
| cv:compilerNote | EvidenceBundle | text |
<script type="application/ld+json">
{
"@context": {
"cv": "https://civicschema.org/schema/v1/",
"schema": "https://schema.org/"
},
"@type": "cv:CandidateProfile",
"@id": "https://example.com/candidates/jane-doe",
"schema:name": "Jane Doe",
"cv:officeSought": "U.S. Senate",
"cv:electionCycle": "2026",
"cv:electionDate": "2026-11-03",
"cv:fecCandidateId": "S0XX00000",
"cv:incumbentStatus": "challenger",
"cv:campaignWebsite": "https://janedoe.com",
"cv:canonicalUrl": "https://example.com/candidates/jane-doe"
}
</script>
<script type="application/ld+json">
{
"@context": {
"cv": "https://civicschema.org/schema/v1/",
"schema": "https://schema.org/"
},
"@type": "cv:LegislativeAchievement",
"cv:officeholder": "Jane Doe",
"cv:achievementTitle": "Rural Broadband Infrastructure Act",
"cv:achievementType": "enacted-legislation",
"cv:billIdentifier": "S.1234",
"cv:enactedDate": "2023-08-15",
"cv:fundingAmount": 45000000,
"cv:fundingPurpose": "Rural broadband deployment",
"cv:districtImpact": "Expands high-speed internet access to 120,000 rural households",
"cv:canonicalUrl": "https://example.com/officeholders/jane-doe/achievements/broadband-act"
}
</script>
Evidence types are standalone companions linked to their subject via cv:canonicalUrl, not by modifying the subject type:
{
"@type": "cv:EvidenceBundle",
"cv:bundleLabel": "Campaign Finance — Jane Doe 2026",
"cv:dateCompiled": "2026-01-15",
"cv:canonicalUrl": "https://example.com/candidates/jane-doe",
"cv:evidenceBases": [
{
"@type": "cv:EvidenceBasis",
"cv:evidenceType": "fec-filing",
"cv:sourceAuthority": "Federal Election Commission",
"cv:officialRecordUrl": "https://www.fec.gov/data/candidate/S0XX00000/",
"cv:sourceDate": "2026-01-31"
}
]
}