---
name: mass-mobilization-protests-ingestion
description: "How to get Mass Mobilization Protest Data data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load Mass Mobilization protests into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/mass-mobilization-protests
Provider: https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/HTTWYL
Checked against the provider's documentation: 2026-11-01

## Access
- No account or key. Dataverse file 4291456 is unrestricted and returns the tab-delimited release.
- The dataset also provides a Stata source representation and a PDF codebook.

## Request
```bash
curl -L -o mmALL_073120_csv.tab 'https://dataverse.harvard.edu/api/access/datafile/4291456'
```

## Format
Tab-delimited event rows with ID, country, region, dates, location, participant measures, protester identity and demands, violence, state-response fields, sources and notes.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Mass Mobilization protest events -> pandas -> Parquet. No key."""
import io
import requests
import pandas as pd

URL = "https://dataverse.harvard.edu/api/access/datafile/4291456"
r = requests.get(URL, timeout=120)
r.raise_for_status()
df = pd.read_csv(io.BytesIO(r.content), sep="\t", low_memory=False)
df.to_parquet("mass_mobilization.parquet", index=False)
print(len(df), "events", df["country"].nunique(), "countries",
      int(df["year"].min()), "to", int(df["year"].max()),
      len(df.columns), "columns")
```
Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 17145 events 166 countries 1990 to 2020 31 columns

## Limits
- Rate limit: Not stated.
- Coverage ends on 2020-03-31 and no continuing update schedule is stated.
- The checked tabular file was 15,625,472 bytes.

## Quirks
- The Dataverse label ends in .tab even though the original uploaded source was CSV; read the served file as tab-delimited.
- Separate start and end day, month and year fields can contain missing components; validate dates before constructing timestamps.
- location is text, not latitude and longitude, and participants can be a count or a categorical description.
- The project website still describes an older 1990-2018 edition; the Dataverse 5.1 metadata and file extend through 2020-03-31.

## Terms and attribution
- The Dataverse release is dedicated under CC0 1.0.
- The checked data, Stata representation and codebook files are unrestricted.
- Terms page: https://dataverse.harvard.edu/api/datasets/:persistentId/?persistentId=doi:10.7910/DVN/HTTWYL

## Sources
- https://dataverse.harvard.edu/api/datasets/:persistentId/?persistentId=doi:10.7910/DVN/HTTWYL: "Mass Mobillization Data project protests against governments, all countries, 1990-2020."
- https://dataverse.harvard.edu/api/datasets/:persistentId/?persistentId=doi:10.7910/DVN/HTTWYL: "version 4.0 - 1990-March 31, 2020"
- https://massmobilization.github.io/about.html: "These data contain events where 50 or more protesters publicly demonstrate against government, resulting in more than 10,000 protest events."
- https://dataverse.harvard.edu/api/datasets/:persistentId/?persistentId=doi:10.7910/DVN/HTTWYL: ""rightsIdentifier":"CC0-1.0""

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
