# DOI to Citation: ABNT, APA, Vancouver & BibTeX Formatter (`br_data_hub/doi-citation-formatter`) Actor

Turn DOIs, DOI links or messy references into clean citations in ABNT NBR 6023, APA 7, Vancouver and BibTeX, in bulk. Resolves metadata from doi.org (Crossref, DataCite) and matches free-text references in Crossref.

- **URL**: https://apify.com/br_data_hub/doi-citation-formatter.md
- **Developed by:** [br_data_hub](https://apify.com/br_data_hub) (community)
- **Categories:** AI, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 citations

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## DOI to Citation: ABNT, APA, Vancouver & BibTeX Formatter

Turn **DOIs, DOI links or messy references** into clean, consistent citations in **ABNT NBR 6023:2018**, **APA 7**, **Vancouver** and **BibTeX**, for one paper or a list of thousands. Metadata comes from **doi.org** (Crossref, DataCite and the other DOI agencies), and references without a DOI are matched in **Crossref**, with a confidence score so wrong matches are not silently accepted.

Most citation tools are one-at-a-time web forms, and almost none produce **ABNT**, the standard required by Brazilian universities and journals. This Actor does it in bulk through an API, with the structured metadata (authors, journal, volume, pages, citation count) next to each formatted reference.

Typical uses: fixing the reference list of a thesis or paper, converting a bibliography to BibTeX for LaTeX, research tools and reference managers, and AI agents that must cite real sources with verified DOIs.

### What you get per reference

- Formatted citations: `abnt`, `apa`, `vancouver` and `bibtex`
- DOI, type, title, authors, journal or book, publisher, year, volume, issue, pages, link
- Citation count from Crossref (when the DOI is registered there)
- How it was found (`doi` or `search`) and, for free-text references, a `matchConfidence` from 0 to 1

### Input

| Field | Description |
|---|---|
| `references` | DOIs, DOI links or free-text references, one per line. Up to 2,000. |
| `styles` | Any of `abnt`, `apa`, `vancouver`, `bibtex`. Default: all. |
| `minConfidence` | Free-text only: minimum title match (0 to 1, default 0.5). |
| `contactEmail` | Optional e-mail sent to Crossref as `mailto` (its etiquette for large lists). |

```json
{
  "references": [
    "10.1038/nature14539",
    "https://doi.org/10.1145/3065386",
    "Vaswani A, et al. Attention is all you need. Advances in Neural Information Processing Systems, 2017"
  ],
  "styles": ["abnt", "bibtex"]
}
```

### Output

One dataset item per reference:

```json
{
  "input": "10.1038/nature14539",
  "matchedBy": "doi",
  "matchConfidence": null,
  "doi": "10.1038/nature14539",
  "type": "article-journal",
  "title": "Deep learning",
  "authors": [
    "Yann LeCun",
    "Yoshua Bengio",
    "Geoffrey Hinton"
  ],
  "containerTitle": "Nature",
  "publisher": "Springer Science and Business Media LLC",
  "year": 2015,
  "volume": "521",
  "issue": "7553",
  "pages": "436-444",
  "url": "https://doi.org/10.1038/nature14539",
  "citedByCount": 70000,
  "citations": {
    "abnt": "LECUN, Yann; BENGIO, Yoshua; HINTON, Geoffrey. Deep learning. Nature, v. 521, n. 7553, p. 436-444, maio 2015. DOI: 10.1038/nature14539. Disponível em: https://doi.org/10.1038/nature14539. Acesso em: 1 nov. 2026.",
    "apa": "LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. Nature, 521(7553), 436–444. https://doi.org/10.1038/nature14539",
    "vancouver": "LeCun Y, Bengio Y, Hinton G. Deep learning. Nature. 2015;521(7553):436-444. doi:10.1038/nature14539",
    "bibtex": "@article{lecun2015deep,\n  title = {Deep learning},\n  author = {LeCun, Yann and Bengio, Yoshua and Hinton, Geoffrey},\n  journal = {Nature},\n  publisher = {Springer Science and Business Media LLC},\n  year = {2015},\n  volume = {521},\n  number = {7553},\n  pages = {436--444},\n  doi = {10.1038/nature14539},\n  url = {https://doi.org/10.1038/nature14539}\n}"
  },
  "error": null
}
```

References that cannot be resolved (unknown DOI, no confident match) come back with `error` filled in, and the best candidate when there is one. They are not charged.

### How much does it cost?

Pay per event: one `citation` per reference resolved, with all styles included. Unknown DOIs and doubtful matches are free.

**$0.002 per citation** (`citation` event, pay per event). Charged once per reference resolved and formatted (all styles included). DOIs not found and doubtful matches are free.

| You get | Free tier | Bronze tier (10% off) | Gold tier (30% off) |
|---|---|---|---|
| 100 citations | $0.20 | $0.18 | $0.14 |
| 1,000 citations | $2.00 | $1.80 | $1.40 |
| 10,000 citations | $20.00 | $18.00 | $14.00 |

Discounts follow your Apify subscription tier: Bronze 10%, Silver 20%, Gold and above 30%. No subscription to this Actor and no charge for platform usage: you pay only for results.
The Apify Free plan includes $5 of monthly credit, enough for about **2,500 citations** at the list price.
You can cap the cost of any run with **Maximum cost per run**; the Actor stops when it is reached.

### Data source and limits

Metadata from the DOI registration agencies through `doi.org` content negotiation (CSL-JSON) and the Crossref REST API (`api.crossref.org`). Crossref metadata is open (CC0). Formatting follows ABNT NBR 6023:2018, APA 7th edition and the NLM/ICMJE Vancouver style as plain text, so italics and bold are not included.

Limits: the quality of each citation depends on the metadata the publisher deposited (missing pages or issue numbers stay missing). Free-text matching works best with the title in the reference. ABNT lists up to three authors and uses "et al." beyond that, as NBR 6023 allows.

### Use it via API

Run it from any language and get the results as JSON. Replace `<YOUR_API_TOKEN>` with your [Apify API token](https://console.apify.com/settings/integrations).

```bash
curl -X POST "https://api.apify.com/v2/acts/br_data_hub~doi-citation-formatter/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"references": ["10.1038/nature14539", "https://doi.org/10.1145/3065386", "Vaswani A, et al. Attention is all you need. Advances in Neural Information Processing Systems, 2017"]}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("br_data_hub/doi-citation-formatter").call(run_input={'references': ['10.1038/nature14539',
                                                     'https://doi.org/10.1145/3065386',
                                                     'Vaswani A, et al. Attention is all you need. Advances in Neural '
                                                     'Information Processing Systems, 2017']})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

You can also schedule runs, send results to webhooks, or connect the Actor to Make, Zapier, n8n, Google Sheets and other [integrations](https://docs.apify.com/platform/integrations).

### Use it with AI agents (MCP)

This Actor is ready for AI agents: typed input and output schemas, pay-per-event pricing, limited permissions and short runs.

- **Apify MCP server:** add `https://mcp.apify.com/?tools=br_data_hub/doi-citation-formatter` to Claude, ChatGPT, Cursor, VS Code or any MCP client, and the agent can call this Actor as a tool.
- **Agent frameworks:** call it from LangChain, LlamaIndex, CrewAI or the OpenAI Agents SDK through the Apify integrations, or with the API call above.
- Results come as structured JSON with stable field names, documented in the **Output** tab.

### FAQ

#### Where does the data come from?

Metadata from the DOI registration agencies through `doi.org` content negotiation (CSL-JSON) and the Crossref REST API (`api.crossref.org`). Crossref metadata is open (CC0). Formatting follows ABNT NBR 6023:2018, APA 7th edition and the NLM/ICMJE Vancouver style as plain text, so italics and bold are not included.

#### How much does it cost?

$0.002 per citation. Discounts follow your Apify subscription tier: Bronze 10%, Silver 20%, Gold and above 30%. See **How much does it cost?** above for examples.

#### Do I pay for errors or empty results?

No. Charged once per reference resolved and formatted (all styles included). DOIs not found and doubtful matches are free.

#### Can I run it on a schedule or connect it to other tools?

Yes. Use Apify schedules to run it daily or weekly, webhooks to get notified, and integrations such as Make, Zapier, n8n and Google Sheets. Everything also works through the API.

#### Can AI agents use it?

Yes. It works as a tool in the Apify MCP server and in agent frameworks, and AI agents can pay per event. See **Use it with AI agents (MCP)**.

#### Is it legal to use this data?

The Actor reads only public sources. You are responsible for how you use the data and for complying with the source's terms and with privacy laws such as GDPR.

#### I found a bug or need a feature. What should I do?

Open an issue in the **Issues** tab. We answer within 14 days, usually much sooner.

### More Actors from BR Data Hub

| Actor | What it does |
|---|---|
| [Documents to Markdown for RAG (Docling)](https://apify.com/br_data_hub/docs-to-markdown) | Convert PDF and DOCX files to clean Markdown with Docling: page count, detected tables, metadata and optional  |
| [Website to llms.txt Generator](https://apify.com/br_data_hub/website-to-llms-txt) | Crawl one website (robots.txt and sitemap aware), generate spec-compliant llms.txt and llms-full.txt files, au |
| [RSS & Atom Feed Reader with Full Text](https://apify.com/br_data_hub/rss-full-text-feed) | Read RSS, Atom and JSON Feed (or find the feed of any website) and get clean items with ISO dates, full articl |
| [Research Papers Search for RAG, from OpenAlex data](https://apify.com/br_data_hub/openalex-research-search) | Search 250M+ scholarly papers from OpenAlex data, or look up DOIs: authors with institutions, venue, citations |

See all our Actors at [apify.com/br_data_hub](https://apify.com/br_data_hub).

### Usar em português

Gera referências **ABNT NBR 6023:2018**, APA 7, Vancouver e BibTeX a partir de DOIs, links ou referências bagunçadas, em lote. Os metadados vêm do doi.org e do Crossref; referências sem DOI são procuradas pelo título, com grau de confiança. Cobrança só pelas referências encontradas; DOI inexistente e correspondência duvidosa não são cobrados.

**Quanto custa:** $0.002 por resultado (`citation`); 1.000 resultados saem por $2.00. Desconto pelo nível da assinatura Apify: Bronze 10%, Silver 20%, Gold ou acima 30%. Erros e consultas sem resultado não são cobrados. Use também pela API ou por agentes de IA no servidor MCP da Apify (`https://mcp.apify.com/?tools=br_data_hub/doi-citation-formatter`).

# Actor input Schema

## `references` (type: `array`):

One per line: a DOI (10.1038/nature14539), a DOI link (https://doi.org/...) or a free-text reference copied from a paper or list (authors, title, journal, year). Up to 2,000 per run.

## `styles` (type: `array`):

Styles to generate: abnt (NBR 6023:2018), apa (7th edition), vancouver and bibtex. Empty for all four.

## `minConfidence` (type: `number`):

Free-text references only: share of the found title's words that must appear in your reference (0 to 1). Below it the row comes back as an error, not charged, with the best candidate.

## `contactEmail` (type: `string`):

Sent to Crossref as mailto, as its etiquette asks, for faster and more reliable answers on large lists. Not stored.

## Actor input object example

```json
{
  "references": [
    "10.1038/nature14539",
    "https://doi.org/10.1145/3065386",
    "Vaswani A, et al. Attention is all you need. Advances in Neural Information Processing Systems, 2017"
  ],
  "styles": [
    "abnt",
    "apa",
    "vancouver",
    "bibtex"
  ],
  "minConfidence": 0.5,
  "contactEmail": ""
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset with all results

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "references": [
        "10.1038/nature14539",
        "https://doi.org/10.1145/3065386",
        "Vaswani A, et al. Attention is all you need. Advances in Neural Information Processing Systems, 2017"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("br_data_hub/doi-citation-formatter").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "references": [
        "10.1038/nature14539",
        "https://doi.org/10.1145/3065386",
        "Vaswani A, et al. Attention is all you need. Advances in Neural Information Processing Systems, 2017",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("br_data_hub/doi-citation-formatter").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "references": [
    "10.1038/nature14539",
    "https://doi.org/10.1145/3065386",
    "Vaswani A, et al. Attention is all you need. Advances in Neural Information Processing Systems, 2017"
  ]
}' |
apify call br_data_hub/doi-citation-formatter --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,br_data_hub/doi-citation-formatter"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dXw9smZZf4y3yTBU5/builds/2Yod0gkeqnSRLdIsX/openapi.json
