quickstatements · git:20260805.9a9b593 · 2026-08-05 · sha256 5daef2722abe651a

quickstatements git:20260805.9a9b593A

Immutable. This exact content never changes and is served at /api/v1/blob/5daef2722abe651a.

---
name: quickstatements
description: Build and run QuickStatements (QS) batches for Wikidata and Commons - the V1 command grammar (statements, qualifiers, references, ranks, item creation), value formatting (dates, quantities, coordinates, monolingual text), multilingual labels/descriptions/aliases, the QS 2.0 and QS 3.0 tools and their web UI/URL/API entry points, plus validation and best practices
license: MIT
compatibility: opencode
depends_on: [wikimedia-api-access, wikidata]
skill_discovery_hints:
  - keywords: ["QuickStatements", "QS batch", "batch edit", "wbcreateclaim", "wbsetlabel", "wbsetdescription"]
  - keywords: ["create item", "CREATE", "LAST", "new item Wikidata", "person item", "New-Q5"]
  - keywords: ["rank preferred", "Rpreferred", "deprecated rank", "forced statement", "MERGE", "statement ID"]
  - keywords: ["multilingual label", "Lmul", "Amul", "alias", "sitelink", "label description alias"]
  - keywords: ["Commons structured data", "M ID", "SDC batch", "QuickStatements Commons"]
last_verified: 2026-06-24
---

# QuickStatements

Build and run **QuickStatements** (QS) batches: batch edits to Wikidata items
(and, via QS 2.0, to Commons Structured Data) written as plain text commands.
The full grammar lives in
[references/quickstatements-syntax.md](references/quickstatements-syntax.md);
canonical upstream docs are
[Help:QuickStatements](https://www.wikidata.org/wiki/Help:QuickStatements)
and the [QS 3.0 User guide](https://meta.wikimedia.org/wiki/QuickStatements_3.0/Documentation/User_guide).

## When to use this skill

Use QuickStatements when you need to apply the **same shape of edit to many
entities** (or many statements to one entity): adding a property to a whole
category's worth of items, setting labels/descriptions in several languages,
creating person items in a batch, or removing statements after cleanup.

Prefer the Wikibase **API** (see the `wikidata` skill) when the batch needs
per-item branching logic, or when you need control QS does not offer (ranks
in QS 2.0, calendar, coordinate globe/precision). Prefer **Pywikibot** for
data-driven loops. QuickStatements' strength is the reviewable, plain-text
batch: you can read exactly what will be edited, run it from a URL, and
roll it back as one edit group.

## Pick the version first

| Need | Use |
|---|---|
| New Wikidata statement work | **QS 3.0** (`quickstatements3.toolforge.org`) - ranks, forced duplicates, grouped edits |
| Commons Structured Data (M IDs) | **QS 2.0** (`quickstatements.toolforge.org`) - QS 3.0 cannot (REST API limit) |
| `MERGE` items, lexemes | **QS 2.0** |
| Programmatic submission | **QS 2.0** `api.php` token interface |
| Trying upcoming features | `qs-dev.toolforge.org` (QS 3.0 dev instance) |

V1 commands are compatible across versions, so a batch like the New-Q5
person example runs unchanged in both.

## Standard operating procedure

### 1. Decide the edits, not the code

List the entity IDs and the exact property/value pairs. Fetch labels and
QIDs you need (Wikidata search or SPARQL - see the `wikidata` skill).
**Search before `CREATE`**: duplicate items are the most common QS disaster.

### 2. Write V1 commands

One command per line, fields separated by `|`:

```
Q42|P31|Q5
Q42|P21|Q6581097
Q42|P569|+1952-03-11T00:00:00Z/11|S854|"https://example.com/source"|S813|+2026-06-24T00:00:00Z/11
```

- **Strings, URLs, filenames, external IDs must be double-quoted** - `"..."`.
- **Time** values: `+1967-01-17T00:00:00Z/11` (`/9` year, `/10` month,
  `/11` day; `+` CE, `-` BCE; `/J` for Julian).
- **Quantity**: `5.5U11574` or `-80~1.5` (no spaces).
- **Coordinates**: `@43.26193/10.92708`.
- **Monolingual text**: `en:"Some text"`.
- Qualifiers follow the value: `|P1545|"1"`.
- References use `S` properties after the value: `|S854|"url"|S813|+...`;
  a new reference group starts with `!S248`.
- New items: `CREATE` then `LAST|...` for every subsequent command on that
  item.
- QS 3.0 extras: rank tokens `R+`/`R0`/`R-` (or `Rpreferred`/`Rnormal`/
  `Rdeprecated`), `+Qid|...` to force a duplicate, `REMOVE_QUAL`,
  `REMOVE_REF`, `SWITCH_VALUE`, `SWITCH_PROPERTY`.
- Edit summaries: append `/* comment */` to a command.

### 3. Multilingual labels, descriptions, aliases

This is where person and entity batches get their translations:

```
LAST|Lmul|"Jane Doe"                 # label in every language
LAST|Len|"Jane Doe"                  # explicit per-language labels
LAST|Lde|"Jane Doe"
LAST|Lfr|"Jane Doe"
LAST|Lnl|"Jane Doe"
LAST|Den|"person"                    # description is per-language (no Dmul)
LAST|Amul|"Jane D."                  # alias for all languages
```

- Proper nouns (names, brands) are **not translated** - `Lmul` plus explicit
  `Lxx` rows is the New-Q5 pattern.
- Descriptions have no `mul`: write `Den`, `Dnl`, ... individually.
- QS 3.0: multiple aliases per language as separate columns
  `|Aen|"Gandhi"|"Mohandas Gandhi"`; QS 2.0: pipe-separated inside one
  quoted value (and not during item creation).

### 4. Validate before running

```
python .claude/skills/quickstatements/scripts/qs_batch.py --file batch.txt
```

The script checks entity/property shapes, value formats (dates, quantities,
coordinates, quotes), qualifier/source pairs, CREATE/LAST pairing, and the
QS 3.0 commands, and can also build a person batch and produce clickable
URLs:

```
python .claude/skills/quickstatements/scripts/qs_batch.py \
  --person "Jane Doe" --description "person" --dob 1980-01-02 \
  --gender Q6581097 --url --version 3
```

### 5. Run

- **Web UI**: paste into "New batch", preview (QS converts to human-readable
  form), then run. Watch the first few commands; hit STOP on a problem.
- **Background** (QS 2.0 "Run in background"): server-side execution, batch
  URL with DONE/ERROR/INIT/RUN counters, revertible as an edit group. Use
  normal mode for ~10 or fewer statements.
- **By URL**: `https://quickstatements.toolforge.org/#/v1=<encoded>`
  (QS 2) or `https://quickstatements3.toolforge.org/batch/new?v1=<encoded>`
  (QS 3).
- **API** (QS 2.0): `POST https://quickstatements.toolforge.org/api.php?action=import`
  with `username`, `token` (from your QS user page), `data`, `submit=1`,
  `openpage=1`, `batchname`, and `site=commons` for SDC. You must have run
  one server-side batch manually before the token works.

### 6. Verify and clean up

- Check the batch status page for ERROR lines; re-run only the failed
  commands (fix the cause first).
- A batch is one **edit group** - roll back the whole thing with
  EditGroups if it was wrong.
- For large or contested runs, follow the Wikidata:Bots approval process.

## Guardrails

- Autoconfirmed account + OAuth login required; QS edits are **public**.
- No duplicate items: always search/resolve QIDs before `CREATE`.
- Reference claims per Help:Sources (identifiers are the exception).
- QS 2.0 does not honor maxlag; large runs are rate-limited by edit limits.
- Never run a batch whose commands you could not read back and explain;
  the whole point of QS is reviewability.

## Related skills

- `wikidata` - data model, SPARQL, and API for gathering IDs and labels.
- `wikimedia-commons-sdc` - QS 2.0 batch mode for Commons M IDs.
- `wikimedia-api-access` - User-Agent and rate-limit conventions.
- `wikimedia-auth-oauth` - OAuth setup for editing tools.