Popular vote on March 8: Please pay particular attention to the information on the special case of connected proposals.
The Swiss Federal Statistical Office (FSO), Politics, Culture and Media Section (POKU), is responsible for processing and publishing the official results of federal popular votes on Voting Sunday. Moreover, in the context of the project VoteInfo, it handles the publication of the results of the cantonal popular votes for the application. The results are processed centrally and made available in machine-readable formats. This documentation focuses on the datasets offered via opendata.swiss which contain the continuously updated result files:
The data are produced in JSON format and uploaded to the FSO’s Data Asset Management (DAM) system as well as to the VoteInfo server. They can be accessed via the DAM API or opendata.swiss.If you want to access and process the data in real-time on voting Sunday, we recommend opendata.swiss.
The overall data processing lifecycle consists of three main phases:
The preparation phase starts several weeks before Voting Sunday. During this phase, all required metadata and structural elements are prepared:
These preliminary datasets are published on
opendata.swiss approximately one month before
Voting Sunday.
For cantonal votes, the cantons are responsible for announcing cantonal
proposals for a given vote date and for entering the corresponding
metadata. The empty structure of the result files containing the
cantonal proposals is typically made available approximately two
weeks before Voting Sunday.
On Voting Sunday, cantonal data deliveries are processed and continuously published from 12:00 p.m. onwards:
gebietAusgezaehlt = true). There are two
notable exceptions:
gebietAusgezaehlt = false).vorlageBeendet = true) for the
respective canton. The vote is considered as concluded only after all 26
cantons are marked as completed for all proposals. We refer to the
results as ‘Provisional official result’.After Voting Sunday, a post-processing phase takes place:
provisorisch = false).The table below describes the properties of the JSON result files for the following datasets:
Real-time
data on federal popular votes
(endpoint URL: https://ckan.opendata.swiss/api/3/action/package_show?id=echtzeitdaten-am-abstimmungstag-zu-eidgenoessischen-abstimmungsvorlagen)
Real-time
data on federal popular votes – Municipal status on the date of the
vote
(endpoint URL: https://ckan.opendata.swiss/api/3/action/package_show?id=echtzeitdaten-zu-den-eidgenossischen-abstimmungen-gemeindestand-am-datum-der-abstimmung)
The two datasets are largely identical in structure. In the first
dataset, the result files of all previous votes are harmonised to the
most recent municipal structure. This primarily affects
the result files of past votes. The logic behind this harmonization is
to ensure compatibility with applications such as VoteInfo, which use a
single, current geometry reference (see also Geometries).
In contrast, the second dataset always presents the result files using
the municipal structure valid on Voting Sunday. In
addition, the second dataset contains a small number of additional
properties that are primarily used by the FSO’s Popular Votes
Dashboard. These additional properties mainly relate to the
presentation of results by settlement type or
language region and are provided in the
raumgliederungen array. Aside from these additional
properties, there is no difference between the files
for the most recent vote, as both datasets reflect the
same current municipal status. For municipal-level analysis, we
recommend using the files with the original municipal structure from the
day of the vote.
| Property | Description | Type | Codelist | Comments |
|---|---|---|---|---|
| abstimmtag | Date of vote. | string (date) | YYYYMMDD | |
| timestamp | Time of file creation. | string (date-time) | ||
| spatial_reference | Unit and date of reference for spatial information (cantons, districts, communes). | array | ||
| spatial_unit | Spatial unit referenced. | string | ||
| spatial_date | Date of status of the information for the spatial unit referenced. | string (date) | YYYY-MM-DD | |
| schweiz | Information on the swiss / proposal level. | object | ||
| geoLevelnummer | Unique identifier of the spatial unit. Generally corresponds to the official ids found in the Swiss official commune register. | string | On the Swiss level, schweiz.geoLevelnummer is currently of type integer and set to 0. | |
| geoLevelname | Name of spatial unit. Generally corresponds to the official names found in the Swiss official commune register. | string | ||
| nochKeineInformation | Indication whether there is information on the proposals. | boolean | Not in use anymore. Currently always set to false | |
| vorlagen | List of voting proposals. | array | ||
| vorlagenId | Unique identifier of proposal. | integer | ||
| reihenfolgeAnzeige | Display order of the proposal. | integer | For federal proposals, it is equal to the property vorlagenId. | |
| vorlagenTitel | List of proposal titles. | array | Currently, the FSO uses the official “communication title” and not the full legal title, exluding the date of the passing of the law, for example | |
| langKey | Language key for the title. For federal proposals, titles are available in DE, FR, IT, RM, EN | string | ||
| text | Proposal title in the specified language. | string | ||
| vorlageBeendet | Indicates if the counting process for a given proposal has ended and the result has been confirmed by the cantonal authority. | boolean | Available on the Swiss and cantonal level. For voting proposals on the federal level: only true, if gebietAusgezaehlt and vorlageBeendet is true for all cantons | |
| provisorisch | Indicates if the results are provisional. | boolean | The results remain provisional until they have been confirmed by the Federal Council and published in the Federal Gazette. | |
| vorlageAngenommen | Indicates whether the proposal has been accepted. In the case of the subsidiary (deciding) question, true indicates that the main proposal is prioritised over the counter-proposal. | boolean or null | ||
| vorlagenArtId | Type identifier of the voting proposal (e.g. popular initiative, facultative referendum, mandatory referendum etc.) | integer | 1 = Mandatory referendum 2 = Optional referendum 3 = Popular initiative 4 = Popular initiative with counter-proposal 5 = Counter-proposal to a popular initiative 6 = Deciding question |
|
| hauptvorlagenId | Identifier of the main proposal if proposals are connected (e.g. main proposal + counter-proposal + deciding question). | integer or null | further information on connected proposals below | |
| reserveInfoText | Additional reserved information text for the proposal | string or null | ||
| doppeltesMehr | Indicates if the cantonal votes (staende) are relevant for the results of the vote. Generally true if a double majority is required for the proposal to be accepted. | boolean | Also used for the deciding question even though the deciding question does not require a double majority. Might be renamed in the future | |
| staende | List of cantonal votes (Stände). | object | ||
| jaStaendeGanz | Number of cantons with a full cantonal vote that have accepted the proposal by a majority. In the case of the subsidiary (deciding) question, this corresponds to the number of cantons with a full cantonal vote that favour the main proposal over the counter-proposal. | integer or null | ||
| neinStaendeGanz | Number of cantons with a full cantonal vote that have rejected the proposal by a majority. In the case of the subsidiary (deciding) question, this corresponds to the number of cantons with a full cantonal vote that favour the counter-proposal over the main proposal. | integer or null | ||
| anzahlStaendeGanz | Total number of cantons with a whole cantonal vote. 20 cantons each have a whole cantonal vote. | integer or null | ||
| jaStaendeHalb | Number of cantons with a half cantonal vote that have accepted a proposal by a majority. In the case of the subsidiary (deciding) question, this corresponds to the number of cantons with a half cantonal vote that favour the main proposal over the counter-proposal. | integer or null | ||
| neinStaendeHalb | Number of cantons with a half cantonal vote that have rejected a proposal by a majority. In the case of the subsidiary (deciding) question, this corresponds to the number of cantons with a half cantonal vote that favour the counter-proposal over the main proposal. | integer or null | ||
| anzahlStaendeHalb | Total number of cantons with a half cantonal vote. Six cantons have half a cantonal vote. | integer or null | ||
| kantone | List of cantons. | array | ||
| bezirke | List of districts. | array | ||
| gemeinden | List of communes. | array | see also https://bfspoku.github.io/wd-poku/geometries.html | |
| zaehlkreise | Subcommunal counting circles for the proposal. | array (optional) | Only used in the canton of Zurich. | |
| geoLevelParentnummer | Parent identifier for the higher level geographical unit. | string | Only used for communal level or lower (gemeinden or zaehlkreise) | |
| resultat | List of vote result types. | object | ||
| anzahlKantoneAusgezaehlt | Number of fully counted cantons. | integer | Only available on the schweiz.vorlagen.resultat level and used only in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| anzahlKantone | Total number of cantons. | integer | Only available on the schweiz.vorlagen.resultat level and used only in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| anzahlBezirkeAusgezaehlt | Number of fully counted districts in a given geographical unit. | integer | Only available on the canton level or higher and used only in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| anzahlBezirke | Total number of districts in a given geographical unit. | integer | Only available on the canton level or higher and used only in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| anzahlGemeindenAusgezaehlt | Number of fully counted municipalities in a given geographical unit. | integer | Only available on the district level or higher and used only in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| anzahlGemeinden | Total number of municipalities in a given geographical unit. | integer | Only available on the district level or higher and used only in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| gebietAusgezaehlt | Indicates if the unit is fully counted. | boolean | ||
| jaStimmenInProzent | Percentage of “yes” votes. The “yes” vote share is calculated by dividing the number of valid yes votes by the total number of valid votes. In the case of the deciding question, this property represents the share of votes for the main proposal. | number or null | ||
| jaStimmenAbsolut | Absolute number of “yes” votes. In the case of the deciding question, this property represents the number votes for the main proposal. | integer or null | ||
| neinStimmenAbsolut | Absolute number of “no” votes. In the case of the deciding question, this property represents the number votes for the counter-proposal. | integer or null | ||
| stimmbeteiligungInProzent | Voter turnout percentage. Voter turnout is calculated by dividing the number of ballots cast (including blank/invalid votes) by the number of persons eligible to vote. | number or null | ||
| eingelegteStimmzettel | Number of ballots cast. | integer or null | ||
| anzahlStimmberechtigte | Number of eligible voters. | integer or null | ||
| gueltigeStimmen | Number of valid votes. In most cases, the number of valid votes on the federal level consists of the sum of yes and no votes. In the case of connected proposals, the “votes without response” (stimmen ohne Antwort) are also added to the number of valid ballots. | integer or null | ||
| raumgliederungen | List of spatial divisions. Currently a combination of language region and settlement type (see also https://www.bfs.admin.ch/bfs/de/home/grundlagen/raumgliederungen.html). | array | only used in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| sprachregId | Language region identifier. | string | only used in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| sprachregName | Names of the language region in different languages (de/fr/it/rm/en) | object | only used in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| siedlungstypId | Settlement type identifier. | string | only used in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) | |
| siedlungstypName | Names of the settlement type in different languages (de/fr/it/rm/en) | object | only used in the unharmonized files (sd-t-17-02-YYMMDD-eidgAbstimmung-o.json) |
coming soon
In rare cases at the federal level, voters decide on an issue that consists of multiple connected proposals (also referred to as variant proposals). This setup applies when a popular initiative is accompanied by a direct counter-proposal.
In such cases, voters are presented with the following three ballot items:
If both the main proposal and the counter-proposal are accepted by the voters, the outcome of the deciding question determines which proposal is ultimately implemented (see also Procedure applicable to an initiative and counter-proposal).
On a technical level, the FSO treats the main proposal, the counter-proposal, and the deciding question as three separate proposals. Each of them is represented as an individual entry in the JSON result files.
These proposals are linked to each other via their identifiers and specific metadata fields, as described below.
In the JSON result files, the deciding question contains the same result properties as other proposals (e.g. number of yes and no votes). However, these values require a specific interpretation:
jaStaendeGanz,
jaStaendeHalb) indicate support for the main initiative,
while “No” results indicate support for the counter-proposal. (see also
table above).doppeltesMehr is set to true because cantonal results
are required to determine the winner of the deciding question. While the
deciding question does not require a traditional double majority
(popular and cantonal) to pass, the outcome is determined by which
proposal garners the higher combined percentage of both popular and
cantonal votes (as per https://www.fedlex.admin.ch/eli/cc/1999/404/de#art_139_b).Finally, if vorlageAngenommen = true then the result of
the deciding question is in favor of the main proposal/initiative. This
interpretation applies only to deciding questions and does not affect
the interpretation of results for other proposal types.
Connected proposals can be identified using their proposal IDs and type indicators:
vorlagenId
identifies the role of the proposal:
ddd1 → main proposalddd2 → counter-proposalddd3 → deciding questionvorlagenArtId further specifies the proposal
type:
4 → main proposal5 → counter-proposal6 → deciding questionFor normal proposals and main
proposals, the field hauptvorlagenId is set to
null.