[FREE] A service to help export your pocket bookmarks, tags, saved article text, and more...
34
stars
102
commits
TypeScript
primary language
Feb 14, 2026
updated
A web-based tool to export your complete Pocket library before it shuts down in October 2025. This tool extracts everything that Pocket's official CSV export leaves out: article text, tags, favorites, images, and all metadata.
[!IMPORTANT] No longer supported as of 2025-09-20 but might work until 10-08 if you're lucky: Unfortunately I no longer have a working account I can debug with, open a new issue to ask for a refund if you paid and weren't able to export your data
Mozilla shut down Pocket in October 2025 and will delete all user data shortly. Their official export only provides a basic CSV with URLs and titles - no article content, no tags, no highlights, no ⭐️, no images, nothing else. This tool used Pocket's internal APIs to export everything.
# Clone the repository
git clone https://github.com/ArchiveBox/pocket-exporter
cd pocket-exporter
# Copy environment variables
cp .env.example .env
# Edit .env with your Stripe keys (optional, for payment processing)
# Run with Docker Compose
docker-compose up -d
Visit http://localhost:3000 to access the exporter.
sessions/
└── {session-id}/
├── session.json # Session metadata
├── payments.json # Payment status (if applicable)
└── articles/
├── {article-id}/
│ ├── index.json # Article metadata
│ ├── article.html # Pocket's archived HTML
│ ├── original.html # Original source HTML (if available)
│ ├── top_image.jpg # Featured image
│ └── image_*.jpg # Article images
└── ...
{
"_createdAt": 1745783047,
"_updatedAt": 1745783047,
"title": "Article Title",
"url": "https://example.com/original/article/url",
"savedId": "956339233",
"status": "UNREAD",
"isFavorite": false,
"favoritedAt": null,
"isArchived": false,
"archivedAt": null,
"tags": [
{"id": "ZGF0YWJhc2VzX194cGt0eHRhZ3hfXw==", "name": "databases"},
],
"annotations": {
"highlights": []
},
"item": {
"isArticle": true,
"title": "Article Title",
"shareId": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"itemId": "956339233",
"readerSlug": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"resolvedId": "956339233",
"resolvedUrl": "https://example.com/original/article/url",
"domain": null,
"domainMetadata": {"name": "example.com"},
"excerpt": "Exceprt of article text...",
"hasImage": "HAS_IMAGES", // or NO_IMAGES
"hasVideo": "HAS_VIDEOS", // or NO_VIDEOS
"images": [
{
"caption": "Some image caption",
"credit": "Some image credit...",
"height": 200,
"imageId": 1,
"src": "https://example.com/some/image/url.png",
"width": 200
},
],
"videos": [
{
"vid": "",
"videoId": 1,
"type": "HTML5",
"src": "https://example.com/some/video.mp4"
}
],
"topImageUrl": "https://example.com/original/article/url/image.png",
"timeToRead": 7,
"givenUrl": "https://example.com/original/article/url",
"collection": null,
"authors": [{"id": "23432434", "name": "Article Author Name", "url": "https://example.com/author/url"}],
"datePublished": "2024-06-14T21:32:00.000Z",
"syndicatedArticle": null,
"preview": {
"previewId": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"id": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"image": ... same format as above images ...,
"excerpt": "Exceprt of article text...",
"title": "Article Title",
"authors": null,
"domain": {
"name": "example.com"
},
"datePublished": "2024-06-14T21:32:00.000Z",
"url": "https://example.com/original/article/url"
}
},
"archivedotorg_url": "https://web.archive.org/web/https://example.com/original/article/url"
}
The tool requires your Pocket session cookies to access your data:
graphql request to getpocket.comYour credentials are only used to fetch your data and can be deleted anytime.
After you fetch the first 100 articles succesfully, the payment form will pop up and ask for payment to continue with the full export.
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env:
# - Add Stripe keys (optional)
# - Set NEXT_PUBLIC_BASE_URL (optional)
# Run development server
npm run dev
# Build for production
npm run build
npm start
# Stripe (optional, for payments)
STRIPE_SECRET_KEY=sk_test_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Base URL (optional)
NEXT_PUBLIC_BASE_URL=http://localhost:3000
(📸). This is is best-effort (as original sites may be offline), and is limited to 50mb max per article.sessions/ directoryHere are some alternative apps that can replace Pocket.
Other export tools:
MIT License
Built with frustration after discovering Pocket's official export is essentially useless for archival purposes. Special thanks to everyone who helped test this.
Remember: Export your data before October 2025! Once Pocket shuts down, your articles will be gone forever.
102 commits
TypeScript
87.1%
JavaScript
12.0%
[FREE] A service to help export your pocket bookmarks, tags, saved article text, and more...
34
stars
102
commits
TypeScript
primary language
Feb 14, 2026
updated
A web-based tool to export your complete Pocket library before it shuts down in October 2025. This tool extracts everything that Pocket's official CSV export leaves out: article text, tags, favorites, images, and all metadata.
[!IMPORTANT] No longer supported as of 2025-09-20 but might work until 10-08 if you're lucky: Unfortunately I no longer have a working account I can debug with, open a new issue to ask for a refund if you paid and weren't able to export your data
Mozilla shut down Pocket in October 2025 and will delete all user data shortly. Their official export only provides a basic CSV with URLs and titles - no article content, no tags, no highlights, no ⭐️, no images, nothing else. This tool used Pocket's internal APIs to export everything.
# Clone the repository
git clone https://github.com/ArchiveBox/pocket-exporter
cd pocket-exporter
# Copy environment variables
cp .env.example .env
# Edit .env with your Stripe keys (optional, for payment processing)
# Run with Docker Compose
docker-compose up -d
Visit http://localhost:3000 to access the exporter.
sessions/
└── {session-id}/
├── session.json # Session metadata
├── payments.json # Payment status (if applicable)
└── articles/
├── {article-id}/
│ ├── index.json # Article metadata
│ ├── article.html # Pocket's archived HTML
│ ├── original.html # Original source HTML (if available)
│ ├── top_image.jpg # Featured image
│ └── image_*.jpg # Article images
└── ...
{
"_createdAt": 1745783047,
"_updatedAt": 1745783047,
"title": "Article Title",
"url": "https://example.com/original/article/url",
"savedId": "956339233",
"status": "UNREAD",
"isFavorite": false,
"favoritedAt": null,
"isArchived": false,
"archivedAt": null,
"tags": [
{"id": "ZGF0YWJhc2VzX194cGt0eHRhZ3hfXw==", "name": "databases"},
],
"annotations": {
"highlights": []
},
"item": {
"isArticle": true,
"title": "Article Title",
"shareId": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"itemId": "956339233",
"readerSlug": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"resolvedId": "956339233",
"resolvedUrl": "https://example.com/original/article/url",
"domain": null,
"domainMetadata": {"name": "example.com"},
"excerpt": "Exceprt of article text...",
"hasImage": "HAS_IMAGES", // or NO_IMAGES
"hasVideo": "HAS_VIDEOS", // or NO_VIDEOS
"images": [
{
"caption": "Some image caption",
"credit": "Some image credit...",
"height": 200,
"imageId": 1,
"src": "https://example.com/some/image/url.png",
"width": 200
},
],
"videos": [
{
"vid": "",
"videoId": 1,
"type": "HTML5",
"src": "https://example.com/some/video.mp4"
}
],
"topImageUrl": "https://example.com/original/article/url/image.png",
"timeToRead": 7,
"givenUrl": "https://example.com/original/article/url",
"collection": null,
"authors": [{"id": "23432434", "name": "Article Author Name", "url": "https://example.com/author/url"}],
"datePublished": "2024-06-14T21:32:00.000Z",
"syndicatedArticle": null,
"preview": {
"previewId": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"id": "2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03",
"image": ... same format as above images ...,
"excerpt": "Exceprt of article text...",
"title": "Article Title",
"authors": null,
"domain": {
"name": "example.com"
},
"datePublished": "2024-06-14T21:32:00.000Z",
"url": "https://example.com/original/article/url"
}
},
"archivedotorg_url": "https://web.archive.org/web/https://example.com/original/article/url"
}
The tool requires your Pocket session cookies to access your data:
graphql request to getpocket.comYour credentials are only used to fetch your data and can be deleted anytime.
After you fetch the first 100 articles succesfully, the payment form will pop up and ask for payment to continue with the full export.
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env:
# - Add Stripe keys (optional)
# - Set NEXT_PUBLIC_BASE_URL (optional)
# Run development server
npm run dev
# Build for production
npm run build
npm start
# Stripe (optional, for payments)
STRIPE_SECRET_KEY=sk_test_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Base URL (optional)
NEXT_PUBLIC_BASE_URL=http://localhost:3000
(📸). This is is best-effort (as original sites may be offline), and is limited to 50mb max per article.sessions/ directoryHere are some alternative apps that can replace Pocket.
Other export tools:
MIT License
Built with frustration after discovering Pocket's official export is essentially useless for archival purposes. Special thanks to everyone who helped test this.
Remember: Export your data before October 2025! Once Pocket shuts down, your articles will be gone forever.
102 commits
TypeScript
87.1%
JavaScript
12.0%