# La línea de comandos exporter

Ejecute sus exportaciones desde Terminal, cron, herramientas de copia de seguridad y agentes.

`exporter` es la app Exporter para Mac ejecutada sin ventana. Usa las mismas conexiones, carpetas de exportación, selección y ajustes que configuró en la app, y escribe en el mismo registro de exportación. Funciona con la app cerrada y nunca pregunta nada: si falta algo, la ejecución se detiene con el código de salida 2 y una línea que dice qué hacer. Solo macOS.

## Instalación

1. Instale Exporter desde el Mac App Store ([descarga](https://exporter.dev/download)) y ábralo.
2. Conecte una app (Apple Notes, Bear, Logseq, Contactos, Mensajes o Tiempo de uso) o una carpeta de Documentos, y elija su carpeta de exportación ([primeros pasos](https://exporter.dev/docs/getting-started)). Estos permisos solo se pueden conceder en la app.
3. En la tarjeta Línea de comandos de la app, pulse «copiar el comando de instalación» y péguelo una vez en Terminal.

La app funciona en un entorno aislado (sandbox) y no puede escribir en su PATH, por eso el último paso es pegar. La línea instala `exporter` en `/opt/homebrew/bin` cuando esa carpeta existe y le pertenece (sin sudo); si no, en `/usr/local/bin` con sudo. Volver a pegarla no causa problemas; sustituye lo que hubiera. `exporter help install` muestra la línea para su Mac.

## Fuentes

`--source` admite una de estas:

| fuente | también se acepta | escribe |
| --- | --- | --- |
| `apple` | `apple-notes`, `applenotes`, `notes` | markdown o html |
| `bear` | | markdown o html |
| `logseq` | | siempre markdown |
| `contacts` | `apple-contacts`, `addressbook` | siempre markdown |
| `messages` | `imessage`, `chats`, `conversations` | siempre markdown |
| `screentime` | `screen-time`, `usage` | siempre markdown, un archivo por día |
| `documents` | `docs`, `files`, `pdf` | los formatos marcados en la tarjeta Documentos |

## Formatos

`--format` admite `markdown` (o `md`) o `html`; no distingue mayúsculas. Cualquier otro valor se detiene con `error: --format pdf: expected markdown | html` y la salida 64.

- sin él, `sync` escribe cada app en el formato definido en su tarjeta (Apple Notes y Bear tienen cada una el suyo) y `export` escribe según el ajuste de la app que exporta; `exporter help sync` y `exporter help export` muestran los actuales
- Logseq, Contactos, Mensajes y Tiempo de uso son siempre markdown, y Documentos escribe los formatos marcados en su tarjeta, así que para ellos `--format html` se ignora con un aviso: `note: logseq export is always markdown, so --format is ignored for this source.`
- Apple Notes escribe una página `.html` por nota ([el formato HTML](https://exporter.dev/docs/notes#markdown-and-html)), con los adjuntos copiados en `attachments/` junto a ella y enlazados, sin front matter. El HTML de Bear es el texto plano de la nota dentro de un `<pre>`, sin estilos, y con las referencias a adjuntos como texto Markdown: los archivos se copian, no se enlazan
- el servidor MCP solo lee archivos markdown, así que una exportación solo en HTML le resulta invisible
- Apple Notes y Bear escriben un formato por ejecución; solo Documentos escribe ambos en una sola sincronización. Una ejecución solo elimina archivos antiguos de su propio formato, así que al cambiar de formato los archivos del otro se quedan en la carpeta. Para los dos formatos, dé a cada uno su propia carpeta:

```sh
exporter export --dest ~/Backups/notes-md   --format markdown
exporter export --dest ~/Backups/notes-html --format html
```

## sync

Ejecuta una vez, de forma incremental, la exportación que configuró en la app, en las carpetas de exportación de la app.

```sh
exporter sync [--source <source>]... [--format markdown|html] [--full] [--json] [--quiet]
```

| flag | qué hace | valor por defecto |
| --- | --- | --- |
| `--source <source>` | solo esta app, repetible | todas las apps conectadas; las no conectadas se omiten |
| `--format markdown\|html` | solo en esta ejecución, el ajuste de la app no cambia. Se guarda en la misma carpeta de exportación que el otro formato; para conservar los dos, exporte cada uno a su propia carpeta con `export --dest` | el ajuste de la app |
| `--full` | vuelve a exportarlo todo. Antes de escribir solo elimina los archivos que escribió Exporter; todo lo demás de la carpeta de exportación se queda | desactivado |
| `--json` | un resumen legible por máquinas | desactivado |
| `--quiet`, `-q` | solo errores | desactivado |

```sh
exporter sync --source apple
```

```text
apple notes: exporting…
apple notes: 1204 of 1204 exported · 3 removed · 18.2s · markdown → /Users/me/Documents/notes
```

La línea de resumen es `<source>: <succeeded> of <selected> exported`, seguida, cuando corresponde, de `N failed`, `N removed` (archivos de elementos que se eliminaron, renombraron o movieron), `N attachment issues`, y después la duración, el formato y la carpeta escrita.

Si la app está abierta, `sync` no exporta nada, sale con 0 y muestra `Exporter is running: real-time sync is live, the export root is already current.`

## export

Una exportación puntual a la carpeta que elija, para instantáneas y scripts. Funciona sin problemas con la app abierta.

```sh
exporter export --dest <folder> [--source <source>] [--format markdown|html] [--organize folders|tags|smart] [--folder "Name"]... [--tag name]... [--dry-run] [--json] [--quiet]
```

| flag | qué hace | valor por defecto |
| --- | --- | --- |
| `--dest <folder>` | obligatorio. Debe estar dentro de una carpeta autorizada en la tarjeta Línea de comandos de la app («añadir carpeta»). Una autorización sobre `~/Backups` cubre todas las carpetas que contiene | ninguno |
| `--source <source>` | la app que se exporta | `apple` |
| `--format markdown\|html` | el formato de esta ejecución | el ajuste de la app |
| `--organize folders\|tags\|smart` | solo Apple Notes: cómo se reparten las notas en carpetas | el ajuste de la app |
| `--folder "Name"` | solo esta carpeta de Apple Notes, repetible, nombre sin distinguir mayúsculas | la selección guardada en la app |
| `--tag name` | solo esta etiqueta, repetible, Apple Notes o Bear | la selección guardada en la app |
| `--dry-run` | muestra lo que se exportaría, sin escribir nada | desactivado |
| `--json`, `--quiet` (`-q`) | como en sync | desactivado |

Sin `--folder` ni `--tag`, Apple Notes y Bear exportan la selección guardada en la app. Logseq exporta todo el grafo, Contactos todas las fichas, Mensajes todas las conversaciones y Tiempo de uso todos los días; en ellos los filtros se ignoran con un aviso.

```sh
exporter export --dest ~/Backups/notes-$(date +%F)
exporter export --dest ~/Backups/work --folder "Work" --format html
exporter export --dest ~/Backups/bear --source bear --tag journal
exporter export --dest ~/Backups/people --source contacts
exporter export --dest ~/Backups/papers --source documents
exporter export --dest ~/Backups/notes --dry-run
```

```text
would export 100 apple notes · markdown → /Users/me/Backups/notes
```

## list

```sh
exporter list sources|folders|tags|dests [--source apple|bear] [--json]
```

| lista | qué muestra | JSON |
| --- | --- | --- |
| `sources` | cada app, conectada o no, con su recuento. Documentos no aparece | `[{"source": "apple", "connected": true, "notes": 1204}, {"source": "messages", "connected": true, "conversations": 1532}, {"source": "bear", "connected": false}]`, con `pages` para logseq, `contacts`, y `days` para `screen-time` |
| `folders` | carpetas de Apple Notes con su número de notas, sangradas según la profundidad. `--source bear` es un error (salida 64) | `[{"name": "Work", "notes": 42, "level": 0}]` |
| `tags` | etiquetas con recuentos, de Apple Notes por defecto, de Bear con `--source bear` | `[{"name": "journal", "notes": 12}]` |
| `dests` | carpetas en las que puede escribir `export --dest`, más la carpeta de exportación de cada app | `[{"path": "/Users/me/Backups", "kind": "granted"}]`, donde `kind` es `granted`, `granted, volume not mounted` o `export root (apple-notes)` |

```sh
exporter list folders --json
```

```json
[{"name": "Work", "notes": 42, "level": 0}]
```

## status

```sh
exporter status [--json]
```

```text
apple notes    connected · last export 2026-09-11 03:00
bear           not connected
logseq         not connected
contacts       not connected
messages       connected · last export 2026-09-11 03:01
screen time    not connected
documents      not connected
root (apple-notes)  /Users/me/Documents/notes
root (messages)  /Users/me/Documents/messages
destinations   /Users/me/Backups
version        3.24 · free · 100 of 100 free notes used
messages       free · 10 of 10 free conversations used
app            not running
```

Con `--json`: un objeto por app, llamado `apple-notes`, `bear`, `logseq`, `contacts`, `messages`, `screen-time`, `documents`, cada uno `{"connected": true, "lastExport": "2026-09-11 03:00"}` (`null` si nunca se exportó); `destinations` (rutas); `tier` (`full` o `free`, el desbloqueo de Apple Notes) y `freeNotesUsed`; `contactsTier` y `freeContactsUsed`; `messagesTier` y `freeConversationsUsed`; `screenTimeTier` y `freeDaysUsed`; `appRunning`. Las horas son locales, `yyyy-MM-dd HH:mm`.

## log

Las ejecuciones de exportación recientes, de la más nueva a la más antigua: el mismo registro que muestra la app, de cada carpeta de exportación y de cada carpeta `--dest` autorizada. Las carpetas con fecha creadas dentro de una carpeta autorizada no se leen; su registro está en `<folder>/.exporter/`.

```sh
exporter log [--last N] [--json]
```

| flag | qué hace | valor por defecto |
| --- | --- | --- |
| `--last N` | cuántas ejecuciones | 10 |
| `--json` | un objeto por ejecución | desactivado |

```text
2026-09-11 03:00  apple-notes   1204/1204 exported  3 removed  clean  → /Users/me/Documents/notes
```

JSON: `[{"source", "finishedAt", "selected", "succeeded", "failed", "format", "status", "destination", "prunedFiles", "runError"}]`. `status` es `clean`, `warnings` (faltan adjuntos) o `failures`.

## doctor

Comprueba que la exportación sin interfaz funcionará y muestra una línea por comprobación: `ok`, `FAIL` con una línea `fix:` debajo, `warn`, o `--` para información.

```sh
exporter doctor
```

Comprueba que la base de datos de cada app conectada se puede leer y que en su carpeta de exportación se puede escribir, que cada permiso de carpeta guardado se resuelve, que en cada carpeta `--dest` se puede escribir, el índice y el comando instalado. Termina con el nivel de la versión, si la app está abierta y el último fallo, si lo hubo. La salida 0 muestra `all good.`, la salida 2 muestra `N problem(s) found.`

## report

Muestra un informe de diagnóstico (versión de la app, macOS y hardware, estado de las conexiones, ejecuciones recientes, último fallo; sin contenido de notas) y lo copia al portapapeles.

```sh
exporter report [--send] [--email <addr>]
```

| flag | qué hace | valor por defecto |
| --- | --- | --- |
| `--send` | nos envía el informe y muestra `sent.`, o `offline: queued, will send on the next run or app launch.` | desactivado |
| `--email <addr>` | añade su dirección para que podamos responder | ninguno |

## help y version

- `exporter help [topic]`: temas `sync`, `export`, `list`, `status`, `log`, `doctor`, `report`, `cron`, `install`. La ayuda de un comando muestra sus ajustes actuales como valores por defecto
- `sync`, `export`, `list`, `log` y `report` también admiten `--help` o `-h`
- `exporter version` (o `--version`, `-v`) muestra `exporter 3.24`
- `exporter` solo en un terminal muestra la descripción general y sale con 64

## Salida JSON

`--json` funciona en `sync`, `export`, `list`, `status` y `log`. La salida se imprime con formato y claves ordenadas. Para `sync` y `export`, añada `--quiet`: sin él, las líneas de progreso y de notas se imprimen en stdout antes del JSON. `export` imprime un objeto de resumen, `sync` imprime `{"runs": [...]}` con uno por fuente:

```json
{
  "attachmentIssues" : 0,
  "durationSec" : 18.2,
  "failed" : 0,
  "format" : "markdown",
  "root" : "/Users/me/Documents/notes",
  "runError" : null,
  "selected" : 1204,
  "source" : "apple-notes",
  "status" : "clean",
  "succeeded" : 1204
}
```

Con la app abierta, `sync` imprime su única línea y ningún JSON. Los errores van a stderr como `error: <what happened and what to do>`.

## Códigos de salida

| código | significado |
| --- | --- |
| 0 | correcto, incluida una ejecución que el cupo gratuito cortó |
| 1 | fallos de exportación: un elemento falló, la ejecución encontró un error o seleccionó elementos y no escribió ninguno |
| 2 | falta configuración: app no conectada, carpeta no autorizada, carpeta o etiqueta no encontrada, nada que exportar; `doctor` encontró problemas; el comando instalado tiene un formato antiguo o la app a la que apunta ya no existe |
| 64 | uso: comando o flag desconocido, valor ausente o incorrecto, `--folder` con Bear, `list folders --source bear`, `exporter` solo en un terminal |

## Dónde quedan los archivos

`sync` escribe en la carpeta de exportación definida para cada app en Exporter, como `~/Documents/notes` o `~/Documents/messages`; `export` escribe en `--dest`. Una carpeta en su carpeta de inicio o un nivel por debajo, como la propia `~/Documents`, recibe una subcarpeta por app (`notes-export`, `messages-export`, etc.), y una carpeta más profunda se usa tal cual. La línea de resumen (tras la flecha) y el `root` del JSON muestran la carpeta real.

Cada carpeta de exportación contiene `.exporter/last-export.json` y `.exporter/last-export.md` (la última ejecución), `.exporter/history/` (las últimas 50 ejecuciones). Apple Notes, Contactos, Mensajes, Tiempo de uso y Documentos también guardan `.exporter/files.json`, cada archivo que escribió una ejecución: la siguiente solo elimina archivos de esa lista que ya no produce ningún elemento (Tiempo de uso nunca elimina un archivo de día). Bear y Logseq también eliminan en la siguiente ejecución los archivos de las notas que eliminó, renombró o cambió de etiqueta. Las exportaciones de Apple Notes y Logseq también reciben `bases/` con vistas de Obsidian.

## Cupo gratuito

La línea de comandos tiene los mismos cupos que la app:

| app | gratis |
| --- | --- |
| Apple Notes | 100 notas |
| Contactos | 100 contactos |
| Mensajes | las 10 conversaciones más recientes |
| Tiempo de uso | los 10 días más recientes en la primera sincronización, y solo esos: los días posteriores necesitan el desbloqueo |
| Documentos | los 10 documentos modificados más recientemente |
| Bear y Logseq | sin límite |

Los elementos ya exportados se siguen resincronizando gratis; el cupo solo detiene los nuevos. Una ejecución que lo alcanza exporta lo que puede, sale con 0 y muestra un aviso (no con `--quiet`):

```text
note: 42 note(s) skipped: free version limit (100 of 100 free notes). upgrade in the app to export everything.
note: 58 contact(s) skipped: free version limit (100 of 100 free contacts). unlock contacts in the app to export everything.
note: 1522 conversation(s) skipped: free version limit (10 of 10 free conversations). unlock messages in the app to export everything.
note: 11 day(s) skipped: free version limit (10 of 10 free days). unlock screen time in the app to archive every day.
note: 5 document(s) skipped: free version limit (10 of 10 free documents). unlock documents in the app to convert every one.
```

`status --json` incluye el nivel y el número usado para Apple Notes, Contactos, Mensajes y Tiempo de uso. Cada app limitada se desbloquea con su propio pago único dentro de Exporter, [con precio por país](https://exporter.dev/pricing), sin suscripción ni pago en la web. La línea de comandos comprueba la compra en cada ejecución; si el App Store no responde en 5 segundos, la ejecución continúa con el cupo gratuito.

## Programación

`exporter help cron` muestra estas líneas con la ruta completa del comando en su Mac: úsela, porque el PATH de cron puede no incluir la carpeta de instalación. En un crontab, escape `%` como `\%`:

```sh
0 3 * * * exporter sync
0 3 * * * exporter export --dest ~/Backups/notes-$(date +\%F)
```

Para Carbon Copy Cloner y otras herramientas de copia de seguridad, ejecute `exporter sync` como script previo y actúe según el código de salida. El comando permanece activo durante toda la exportación, incluso cuando macOS lo suspende sin nadie con la sesión iniciada. Mientras la app está en marcha, con la ventana abierta o cerrada, `sync` no hace nada: la sincronización en tiempo real ya mantiene la carpeta al día.

## Servidor MCP

La app, no la línea de comandos, ejecuta un servidor MCP local que permite a Claude, Cursor, VS Code y otros clientes buscar y leer sus exportaciones, en `http://localhost:8744/mcp`. [La página del servidor MCP](https://exporter.dev/docs/mcp) lo cubre todo, desde cómo iniciarlo hasta sus seis herramientas.

## Solución de problemas

Ejecute primero `exporter doctor`; cada comprobación fallida muestra su solución. [Ayuda](https://exporter.dev/docs/help) también cubre los mensajes de la app.

- `X is not authorized`: añada la carpeta (o una superior) en la tarjeta Línea de comandos y vuelva a ejecutar. `exporter list dests` muestra lo que está autorizado
- `apple notes is not set up. open Exporter and connect Apple Notes + an export folder.` (lo mismo para cada app): conéctela en Exporter
- `sync` indica que Exporter está abierto: no hay nada que hacer, la app mantiene la carpeta al día. Use `export --dest` para una copia aparte
- `no notes were written. run "exporter doctor" to check folders and permissions.`: la ejecución seleccionó notas y no escribió ninguna; `doctor` comprueba las carpetas y los permisos
- `bookmark broken`: la carpeta se movió, se eliminó o su volumen no está montado. Vuelva a elegirla en la app
- el comando instalado tiene un formato antiguo, o cron y las herramientas de copia de seguridad ven la salida 19: vuelva a pegar el comando de instalación
- la app se ha movido desde que instaló el comando: vuelva a pegar el comando de instalación
- está desbloqueado pero la ejecución dice free: la comprobación de la compra espera como máximo 5 segundos y luego continúa con el cupo gratuito. Vuelva a ejecutar
- un problema que doctor no puede explicar: `exporter report --send --email you@example.com`

## Related

- [MCP server](https://exporter.dev/docs/mcp): Connect Claude and other agents
- [For agents](https://exporter.dev/agents): Skills, command line and MCP for agents
- [Apple Notes](https://exporter.dev/docs/notes): Folders, fields, HTML and fixes
- [Changelog](https://exporter.dev/changelog): What changed in each version

---

human version: https://exporter.dev/es/docs/cli
every page: https://exporter.dev/llms.txt
