Zotero logo Zotero automation · runs weekly

Add papers to Zotero by DOI

You finish a reading session with twenty DOIs in a notes file, and every one still has to be pasted into Zotero and dragged into the right collection.

Cotlet does it in your own Zotero account with search_items, add_item_by_identifier and add_items_to_collection, called by your AI agent, an n8n workflow or a script.

Hosted · nothing to install or maintain

Can Zotero do this on its own?

Zotero offers Add Item by Identifier in the desktop app and nothing hosted for it (checked 16 Oct 2026). The Web API creates an item from JSON you fill in, with itemType required, and its docs describe no lookup by DOI or ISBN. A script that calls the API alone has to fetch the metadata somewhere else first.

How you do it in Zotero today

  1. Select the collection you want first in the left pane: Zotero saves new items into the collection selected at that moment.
  2. Click the Add Item by Identifier button in the toolbar, paste the identifier and press Enter. Several identifiers can go in at once, separated by spaces, commas or line breaks.
  3. Zotero fetches the metadata, for DOIs from CrossRef and other registries, and adds one item per identifier.
  4. An identifier the registries do not know adds nothing, so you compare the new items against your list to find the gaps.
  5. Papers that belong in a second collection are dragged over by hand, one selection at a time.

How to add papers to Zotero by DOI

Prompt

Add these DOIs to my Zotero library and put them in the collection "Thesis: related work". Tell me which ones Zotero could not find.
  1. 01

    Clean the list

    Your agent trims each DOI to its bare form, drops repeats inside the list and keeps the original order, so the report matches what you pasted.

  2. 02

    Look for what you already have

    For each DOI it runs search_items on the likely title once the paper is resolved, and flags a probable duplicate in the report. It does not skip silently, because quick search covers titles and creators, not DOIs.

  3. 03

    Add the papers

    add_item_by_identifier takes the whole batch in one call and files the new items straight into the collection you named. Identifiers that Zotero cannot resolve come back in not_found.

  4. 04

    Second collections

    If a paper belongs in more than one collection, add_items_to_collection adds the same item keys to the others. The item stays in the first one.

  5. 05

    Report the gaps

    The agent lists created items with titles, the DOIs that were not found and the probable duplicates, so you fix the three odd ones by hand instead of checking all twenty.

What you get back

Example data

3 DOIs received, 2 added to "Thesis: related work"
Added: Sparse attention for long documents (2025), A survey of retrieval for question answering (2024)
Not found: 10.9999/broken.2026.7
Possible duplicate: Sparse attention for long documents already in "Reading queue"

Other ways to ask

  • Every Monday, read the DOIs from my notes file and add the new ones to "Reading queue".
  • Add these ISBNs to my library and put them in the collection "Course books".
  • Add these arXiv IDs, tag each one "to read" and tell me which have no DOI.

What Zotero allows, and what to know first

  • Zotero accepts ISBN, DOI, PubMed ID, arXiv ID and ADS Bibcode as identifiers, so the same call works for books and preprints.
  • DOI metadata comes from CrossRef and other registries; the item is only as complete as the registry record.
  • New items go into the collection that is selected when you add them, so the collection key matters for where a paper lands.
  • Zotero accepts up to 50 items, collections or saved searches in one write request, so long lists are sent in batches.
  • Added papers sync to zotero.org with the rest of your data, which is free and unlimited; PDF files count against the 300 MB free storage.

add_item_by_identifier and add_items_to_collection change only your own Zotero data and reach no one else, so they run without asking first.

Sources: Zotero: adding items to Zotero · Zotero: collections and tags · Zotero Web API v3: write requests · Zotero: syncing

Call add_item_by_identifier from a script

curl

curl -X POST https://cotlet.dev/api/v1/zotero/item-by-identifiers \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"identifiers":["10.1234/example.2026.001","10.1234/example.2026.002","10.9999/broken.2026.7"],"collection_key":"C4T8WZ2N"}'

Example response

{
  "requested": 3,
  "created": [
    {
      "item_key": "H6R2VB5D",
      "title": "Sparse attention for long documents",
      "identifier": "10.1234/example.2026.001"
    },
    {
      "item_key": "N9Q4XA7E",
      "title": "A survey of retrieval for question answering",
      "identifier": "10.1234/example.2026.002"
    }
  ],
  "not_found": [
    "10.9999/broken.2026.7"
  ],
  "collection_key": "C4T8WZ2N"
}

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is zotero_write → add_item_by_identifier. Example data.

Schedule it in n8n, Make, Zapier or cron

Zotero tools this automation uses

Cotlet Zotero tools used to add papers to Zotero by DOI
Tool Parameters
search_items library, query, full_text, tag, item_type, collection_key, unfiled, added_since, limit, cursor
add_item_by_identifier identifiers, collection_key
add_items_to_collection collection_key, item_keys
All 11 Zotero tools with descriptions

Frequently asked questions

Does it download the PDF too?

The tool adds the item with its metadata. Attaching files uses Zotero Storage, which has 300 MB free, and is a separate step in Zotero.

Is it safe to connect Zotero to Cotlet?

Yes. You sign in to Zotero yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Zotero once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

Give your agent access to Zotero.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Zotero.