# Document and PDF Annotation Tools Compared: Open-Source and Paid

Source: https://www.potatoannotator.com/docs/guides/document-annotation-tools-compared

**Annotating a PDF needs three things a text tool does not provide: rendering the real page, anchoring labels to page coordinates, and linking annotations across pages. Potato, Labelbox, INCEpTION and Kili render PDFs natively. Labelbox and Potato are the two that document a way to link annotations on different pages. Label Studio's open-source edition asks you to convert the PDF to images first, and its native PDF labeling is an Enterprise feature.**

A PDF describes marks on pages rather than a sequence of characters, so annotating one as extracted text throws away the page number, the column order, and the table structure. [How to annotate documents](/docs/guides/document-annotation) covers why that matters and what the alternatives are. This page compares the tools.

This page covers documents only. [Annotation Tools Compared](/docs/guides/annotation-tools-compared) covers every data type on one page.

## Capabilities side by side

Every entry below was read from the tool's own documentation on 2026-09-24. A dash means the documentation did not describe the capability, which is not the same as the tool refusing it.

| Tool | Renders PDF natively | Region boxes on the page | Links across pages | Built-in OCR | License |
|---|---|---|---|---|---|
| Potato | Yes | Yes | Yes | Opt-in, link mode | Open source |
| Labelbox | Yes | Yes | Yes | Yes, in-editor | Tier not stated |
| Kili | Yes | Yes | Relations yes, across pages not stated | Yes | Free trial, then paid |
| INCEpTION | Yes | Text spans only | Relations yes, across pages not stated | Needs embedded text | Apache 2.0 |
| Label Studio | Enterprise only | Yes | - | Reads existing text layer | Apache 2.0 core, PDF gated |
| Prodigy | Via `prodigy-pdf` plugin | Yes | - | Yes, via Tesseract | Paid, $390 personal |
| doccano | - | - | - | - | MIT |
| brat | - | - | - | - | MIT |
| CVAT | Docs list images, video, audio, point clouds | - | - | - | Open source |

Two columns decide most projects. Native rendering is what lets an annotator see the document instead of a reconstruction of it, and cross-page linking is what lets them record that a claim on page 2 rests on a table on page 9.

## Cross-page linking

Relations within a page are common. Every tool here that renders PDFs can join two annotations that sit near each other. Linking across a page boundary is rarer, because it requires the interface to hold two distant locations on screen or in memory at once.

Labelbox documents an explicit workflow for it. The annotator selects the relationship tool, right-clicks the first annotation and chooses "Select relationship start", scrolls to the destination and chooses "Select relationship end". Potato takes the other approach, stacking every page in one scrollable container in `view_mode: scroll` so both ends of the link are reachable without leaving the view, and drawing the link as a single arc.

INCEpTION and Kili both support relations on PDFs, and neither one's documentation states whether a relation may span pages. Treat that as unknown rather than as a no.

## Where the editions differ

Label Studio is the case where the edition matters more than the tool. Its open-source template for multi-page documents says that annotation "requires that you first pre-process your document by converting it into separate images", which loses the text layer and with it text-span annotation. Native PDF rendering and the `OcrLabels` tag are documented as Enterprise features, with PDFs up to 100 pages and a `pageIndex` on each result.

Its OCR reads a text layer that already exists rather than recognizing characters in an image. The docs are direct about the requirement, asking you to verify "whether you can highlight text in the PDF using your cursor". A scanned page needs an external OCR step first.

Prodigy reaches PDFs through the separate `prodigy-pdf` plugin, which supplies `pdf.image.manual` for boxes on rendered pages, `pdf.spans.manual` for spans on extracted text, and `pdf.ocr.correct` for reviewing Tesseract output. Prodigy is a proprietary lifetime license at $390 for personal use and $490 per seat for companies, with a five-seat minimum.

doccano and brat are text tools. doccano's shipped importer catalogue lists TextFile, TextLine, CSV, FastText, JSON, JSONL, Excel, CoNLL, ImageFile and AudioFile, with no PDF importer among them. brat stores each document as a plain UTF-8 text file beside a standoff `.ann` file, so pages have no representation in its data model. Both are MIT licensed and both remain good choices for the text tasks they were built for.

CVAT's documented media formats are images, video, audio and point clouds. Its documentation does not mention PDF, which is a statement about the documentation rather than about the codebase.

## Scanned documents

OCR is where the tools diverge most in what they will do for you. Labelbox and Kili recognize text from pixels, so a scan works without preparation. Kili uses the PDF's native text where it exists and falls back to the image otherwise, and accepts externally computed OCR through a metadata field in Google Vision format. Label Studio and INCEpTION both require an embedded text layer and leave recognition to you.

Potato's OCR is opt-in and runs only in link mode. The `ocr` option takes `false`, `true`, or `auto`, and `auto` runs the pass only when the embedded text layer comes back empty, which suits a corpus mixing born-digital files with scans.

```yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        annotation_mode: link
        view_mode: scroll
        ocr: auto
        enable_text_anchors: true
        enable_region_anchors: true
        anchor_labels:
          - name: claim
            color: "#dc2626"
          - name: figure
            color: "#2563eb"
        link_types:
          - name: refers_to
            directed: true
            allowed_source_labels: [claim]
            allowed_target_labels: [figure]
```

`allowed_source_labels` and `allowed_target_labels` constrain which anchors a link type can join, so a `refers_to` link can start only on a claim and end only on a figure. A guideline expressed that way is enforced by the interface rather than remembered by the annotator.

## What Potato does not do for documents

Potato does not supply an annotator workforce, and Labelbox, Kili and Scale are built around managed labeling services. Potato has no model-training loop attached to document annotation, which is what `prodigy-pdf` offers through the rest of Prodigy. Potato's OCR runs only in link mode, so a span-mode task on scans needs the text layer added beforehand.

Word and Markdown files use Potato's separate `document` display rather than the `pdf` display. Among the tools here, doccano's and INCEpTION's format lists are explicit enough to say DOCX is absent; the others do not mention it either way.

## Further reading

- [How to annotate documents and PDFs](/docs/guides/document-annotation) covers anchors, scans and what the layout carries.
- [PDF annotation](/docs/annotation-types/pdf-annotation) documents every option the `pdf` display takes.
- [Annotation Tools Compared](/docs/guides/annotation-tools-compared) covers every data type on one page.
- [Text Annotation Tools Compared](/docs/guides/text-annotation-tools-compared) covers NER, relations and classification.

Checked against each project's documentation, pricing page and repository on 2026-09-24. If a cell is wrong, [tell us](https://github.com/davidjurgens/potato/issues/new).
