{% extends "base.html" %} {% from "_help.html" import info %} {% from "_miss_surface.html" import status_icon %} {% from "_icon_btn.html" import icon_button %} {% from "_job_status.html" import job_status %} {% block title %}Wanted — Paperful{% endblock %} {% block body_attrs %}{% if request.query_params.get('run') or request.query_params.get('poll') %} data-poll-run="{{ request.query_params.get('run') or request.query_params.get('poll') }}"{% endif %}{% endblock %} {% block content %}

Wanted

Find PDFs for items in the collection shown in the header. Missing means no file yet. Held means Paperful found a file but has not attached it, or the DOI does not match. Have means a matching PDF is already in the library. Preview shows what would happen; Grab downloads; Attach writes held files into Zotero.

{% if coach %}
{{ coach }} System
{% endif %} {% if error %}
{{ error }}
{% endif %} {{ job_status(job) }}

Have {{ counts.have }} · Held {{ counts.held }} · Missing {{ counts.missing }}

Missing {{ info("Items with no stored PDF. This is the usual list to Preview and Grab.") }} Held {{ info("A PDF was downloaded or linked, but it is not attached yet, the DOI does not match, or the file still needs a check.") }} Have {{ info("A PDF whose DOI matches the library item is already on the record.") }}

Fetch

Work on the current collection, or on rows you tick in the table below. With no rows ticked, Preview and Grab use the whole Missing list. {% if attach_mode == 'auto' %}Grab saves files under out/ and attaches them when the library can be written (Zotero 10 or newer). On Zotero 7–9 the files stay on disk. Change this under Settings.{% else %}Grab saves files under out/ only. Press Attach for the copies you trust. Attach needs Zotero 10 or newer; on 7–9, attach the files in Zotero. Settings can make Grab attach automatically.{% endif %}

{% if prefs.advanced %}

Filters {{ info("Narrow which items this run considers. Leave blank to use the whole Missing list (or your ticked rows).") }}

Optional limits. Undated items are dropped when you set a year range.

{% endif %}

Actions {{ info("Preview is safe. Grab downloads to Paperful. Attach writes held files into Zotero.") }}

{{ info("Show which items would be fetched, without downloading.") }} {% if attach_mode == 'auto' %} {{ info("Download PDFs into out/ and attach them into the library when write access is available (Zotero 10 or newer).") }} {% else %} {{ info("Download PDFs into Paperful’s holding area. They are not attached to Zotero until you Attach.") }} {% endif %} {{ info("Write already-downloaded held PDFs into Zotero. Skips files that fail the DOI or length checks unless you override those in Advanced.") }}
{% if prefs.advanced %}

Advanced

Overrides and recovery. These can attach a PDF that is the wrong paper, or open many browser tabs. Preview first when a Preview button is offered.

Attach {{ info("Write held PDFs into Zotero, including files the usual Attach button would refuse.") }}

Use these only when you have looked at the held file and still want it on the item.

{{ info("Show which held files would be attached with the overrides above, without writing to Zotero.") }}
{{ info("Apply the last successful attach preview to Zotero.") }}

Recover {{ info("Re-run the browser agent on items a Grab already missed. Needs LLM config and the browser-agent extra.") }}

This opens a real browser and tries publisher pages one by one. It is slower than Grab and can hit captchas.

{{ info("Show which items would be sent to the browser agent, without opening a browser.") }}
{{ info("Run the last successful recover preview in a headed browser.") }}

Handoff {{ info("Open publisher pages in your own browser so you can download PDFs by hand. Paperful never clicks Request full-text for you.") }}

Use this when automated fetch cannot get a file — typically paywalled papers you can reach yourself.

Inbox {{ info("A drop folder for PDFs you downloaded yourself. Paperful matches files to library items by DOI or title.") }}

Put hand-downloaded PDFs in the configured inbox folder, then drain it here.

{{ info("Match whatever is waiting in the drop folder and attach the hits. Unmatched files stay put.") }}

Reachout {{ info("Export a list of authors to ask for a PDF (ResearchGate and similar). Paperful never sends mail.") }}

Builds a contact list for items that are still missing. Optional Twenty lookup fills emails when that integration is on.

{% endif %}

Items

{% if wanted_pagination.total %} {{ wanted_pagination.range_start }}–{{ wanted_pagination.range_end }} of {{ wanted_pagination.total }} {% else %} 0 of 0 {% endif %} {% if wanted_pagination.prev_url %} Previous {% endif %} Page {{ wanted_pagination.page }} / {{ wanted_pagination.page_count }} {% if wanted_pagination.next_url %} Next {% endif %}

Tick rows to limit Fetch (and Advanced attach, recover, handoff, or reachout) to those items. With none ticked, Fetch uses the whole tab. The icon in Detail explains why an item is missing or held — hover it.

{% for row in rows %} {% endfor %}
TitleDetail
{{ row.title }} {{ icon_button('Detail', 'detail', onclick="openDrawer('d-" ~ row.key ~ "')") }}

{{ row.title }}

Key {{ row.key }}{% if row.year %} · {{ row.year }}{% endif %}

{% if row.doi %}

DOI {{ row.doi }}

{% endif %} {% if row.source %}

Source {{ row.source }}

{% endif %} {% if row.state %}

Verification {{ row.state }}{% if row.reason %} ({{ row.reason }}){% endif %}

{% endif %} {% if row.miss_plain %}

{{ row.miss_plain }}

{% endif %} {% if row.has_summary %}

Open summary

{% endif %} {% if prefs.advanced and briefs.llm_on and tab != 'missing' %}
{% endif %}
{% if row.miss_plain %}{{ status_icon(row.miss_surface, row.miss_plain, row.miss_detail) }} {% elif row.state %}{{ status_icon(row.state, row.verify_plain, row.verify_tip) }} {% endif %} {% if row.has_summary %}summary{% endif %}
{% endblock %} {% block scripts %} {% endblock %}