What GitHub Sync Does
GitHub Sync (beta) keeps a private GitHub repository up to date with a survey's response data automatically, on a schedule, so you never have to manually re-export and re-upload a CSV into your analysis pipeline again. Connect your GitHub account once, then create a repo for any survey you want synced — a GitHub Action already built into the repo pulls fresh data on a recurring interval and commits it to data/responses.csv.
This is a beta feature. If you don't see a GitHub Sync card in Export, it isn't enabled on your account yet.
Export: GitHub Sync
Connect Your GitHub Account
Step 1: Open Workspace Settings. This is a one-time, account-level step — it authorizes the Domandata GitHub App, it does not create any repo yet.
Step 1: Open Settings
Step 2: Click Connect GitHub. You'll be redirected to GitHub to approve the installation on your account or organization, then redirected back into Domandata.
Step 3: Confirm the connection. Once connected, Workspace Settings shows the GitHub account or organization login the app is installed on. You only need to do this once, even if you plan to sync many surveys.
Create a Repo For a Survey
Once GitHub is connected, each survey you want synced gets its own repo, created from a Domandata-owned template.
Step 1: Open Export. Scroll to the GitHub Sync card at the bottom of the tab.
Step 1: Open Export
Step 2: Click Create Repo. This is disabled, and links back to Workspace Settings instead, until GitHub is connected.
Step 3: Read and confirm the consent notice. The dialog states plainly what the sync will and won't do — see the next section for the exact guarantees. You must confirm before a repo is created.
Step 4: (Optional) Open Advanced. Collapsed by default, this holds the option to include free-text and other identifying answers in the sync. Leave it off unless you specifically need those columns in the synced data.
Step 5: Done. The repo is created, a scoped export API key is generated automatically for it, and the first sync runs shortly after. Export then shows the repo link and a Disconnect action.
What The Consent Notice Tells You
Before the repo is created, Domandata asks you to confirm three things — worth understanding fully before you click through:
- The repo is always private. There is no public option in this flow, and this isn't researcher-configurable after creation.
- Free-text and identifying answers are excluded by default. Short answer, signature, file upload, audio interview, and text chat questions are left out of the synced data unless you opt in from the Advanced section. This is the default specifically because these question types are the ones most likely to carry directly identifying content.
- Deleting a response in Domandata does not remove it from prior synced commits. Once data has synced into a commit in the repo's history, deleting that response afterward in Domandata only stops it from appearing in future syncs — it does not rewrite or purge the repo's git history. If a response needs to be fully removed from the synced repo, that has to be done in GitHub directly (for example, rewriting history or deleting the repo).
Advanced: Default Export Options and Starter Files
Workspace Settings → GitHub Sync has an Advanced section, collapsed by default, holding two account-wide defaults applied to every repo created after you set them — existing repos keep whatever they were created with:
- Data file format. Choose CSV or JSON for the synced
data/file, whether values come back as display labels or codebook recode values, and — for JSON — whether rows are flattened to one object per response. These mirror the same options available directly on/api/v1/export. - Starter files. Any number of extra files — scripts, documentation, anything — added to every new repo alongside the base template. Content can include
{{Creation Date}},{{Survey Name}}, and{{Repo Name}}tokens, filled in automatically when the repo is created — useful for something like an R script that always starts with a standard cleaning-script header.
Settings: GitHub Sync Advanced
Disconnecting a Repo
The Disconnect action on a synced survey's card stops that repo's sync for real: it disables the repo's GitHub Action and revokes the API key it was using, so no further response data can reach it. It does not delete the repo or the data already committed to its history — if you want that gone too, delete the repo directly in GitHub.
Disconnecting GitHub entirely from Workspace Settings does the same thing for every repo tied to that connection at once.
Limits
The sync pulls from the same /api/v1/export endpoint available to every API key, which caps at a fixed number of responses per call (currently 20,000). For most studies this is far more than enough, but on a very large survey the synced data/responses.csv can stall at that row count rather than reflecting every response. If you're running a very large survey and see the sync stop growing, that cap is why — use paginated export instead for the full dataset.
Sync runs on a schedule (every 15 minutes) plus on demand from GitHub's Actions tab — it is not instant or webhook-triggered. Expect a short delay between a new response arriving and it showing up in the repo.