Skip to main content

ExtraForm

Pull, edit, and push Google Forms using local files.

ExtraForm transforms Google Forms into a file-based representation optimized for LLM agents. It follows the same pull/diff/push workflow as ExtraSheet.

Installation

pip install extraform

Or with uvx:

uvx extraform pull <form_url>

Quick Start

# 1. Pull a form
extraform pull https://docs.google.com/forms/d/1FAIpQLSd.../edit

# 2. Edit form.json in your editor or with an AI agent

# 3. Preview changes
extraform diff 1FAIpQLSd...

# 4. Apply changes
extraform push 1FAIpQLSd...

Commands

pull

Download a Google Form to a local folder:

extraform pull <form_url_or_id> [output_dir]

Options:

  • --responses - Include form responses (read-only)
  • --max-responses N - Maximum responses to fetch (default: 100)
  • --no-raw - Don't save raw API responses

diff

Preview changes without applying them:

extraform diff <folder>

Outputs the batchUpdate JSON to stdout.

push

Apply changes to the Google Form:

extraform push <folder>

On-Disk Format

After pulling a form, you'll have:

<form_id>/
  form.json                 # Form structure - edit this!
  responses.tsv             # Read-only snapshot of responses
  .raw/
    form.json               # Raw API response
    responses.json          # Raw responses (if fetched)
  .pristine/
    form.zip                # Original state for diff

form.json

The form structure mirrors the Google Forms API but is cleaned up for readability:

{
  "formId": "1FAIpQLSd...",
  "info": {
    "title": "My Survey",
    "description": "Please fill out this survey"
  },
  "items": [
    {
      "itemId": "abc123",
      "title": "What is your name?",
      "questionItem": {
        "question": {
          "required": true,
          "textQuestion": {
            "paragraph": false
          }
        }
      }
    }
  ]
}

Question Types

Type JSON Key Example
Short answer textQuestion {"paragraph": false}
Long answer textQuestion {"paragraph": true}
Multiple choice choiceQuestion {"type": "RADIO", "options": [...]}
Checkboxes choiceQuestion {"type": "CHECKBOX", "options": [...]}
Dropdown choiceQuestion {"type": "DROP_DOWN", "options": [...]}
Linear scale scaleQuestion {"low": 1, "high": 5}
Date dateQuestion {"includeYear": true}
Time timeQuestion {"duration": false}
Rating ratingQuestion {"iconType": "STAR", "ratingScaleLevel": 5}

Non-Question Items

Type Purpose
pageBreakItem Section divider
textItem Static text/instructions
imageItem Embedded image
videoItem Embedded YouTube video

Limitations

  • File upload questions: Cannot be created via API (read-only)
  • Responses: Read-only, cannot modify submitted responses
  • documentTitle: Read-only, update via Google Drive

Development

cd extraform
uv sync
uv run pytest tests/ -v
uv run ruff check . && uv run ruff format .
uv run mypy src/extraform

License

MIT

Metadata

Release files for extraform 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for extraform 0.3.1
File Size Uploaded Provenance
extraform-0.3.1.tar.gz 67.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for extraform 0.3.1
File Interpreter ABI Platform
extraform-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 92.2 kB

Release files / extraform-0.3.1.tar.gz

Download URL extraform-0.3.1.tar.gz
Size 67.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5f7d99a0e24a26b9b8dc3850a944a24fc7b97ba4af701aaf8e88ae68d2d13fa9
BLAKE2b-256 checksum
How to use checksums
b5f6c4d4f641e742b6cce93378acd71e515fe735a442464c9d6b00e2781f1066
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 27, 2026.

Transparency log

Release files / extraform-0.3.1-py3-none-any.whl

Download URL extraform-0.3.1-py3-none-any.whl
Size 24.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cb1f4a91580d50f82544ab001dde1ac545259d4b2819e4aa2e041c50355cf547
BLAKE2b-256 checksum
How to use checksums
7be5c37430f2242e2c7e416b9d6cced5c3c44a43e16ea61f4efc9e6c9cb87d88
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 27, 2026.

Transparency log

Security for extraform 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for extraform-0.3.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page