{"id":30358120,"url":"https://github.com/ArchiveBox/pocket-exporter","last_synced_at":"2025-08-19T09:03:40.539Z","repository":{"id":301236548,"uuid":"1008309105","full_name":"ArchiveBox/pocket-exporter","owner":"ArchiveBox","description":"A service to help export your pocket bookmarks, tags, saved article text, and more...","archived":false,"fork":false,"pushed_at":"2025-07-09T06:08:55.000Z","size":1384,"stargazers_count":25,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-18T02:49:45.163Z","etag":null,"topics":["archivebox","archiving","bookmarks","getpocket","html","internet-archiving","pocket","urls","web-archiving"],"latest_commit_sha":null,"homepage":"https://pocket.archivebox.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArchiveBox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-25T10:49:40.000Z","updated_at":"2025-08-07T13:14:12.000Z","dependencies_parsed_at":"2025-06-26T16:30:27.764Z","dependency_job_id":null,"html_url":"https://github.com/ArchiveBox/pocket-exporter","commit_stats":null,"previous_names":["archivebox/pocket-exporter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ArchiveBox/pocket-exporter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArchiveBox%2Fpocket-exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArchiveBox%2Fpocket-exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArchiveBox%2Fpocket-exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArchiveBox%2Fpocket-exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArchiveBox","download_url":"https://codeload.github.com/ArchiveBox/pocket-exporter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArchiveBox%2Fpocket-exporter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271128191,"owners_count":24703873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archivebox","archiving","bookmarks","getpocket","html","internet-archiving","pocket","urls","web-archiving"],"created_at":"2025-08-19T09:03:30.530Z","updated_at":"2025-08-19T09:03:40.530Z","avatar_url":"https://github.com/ArchiveBox.png","language":"TypeScript","readme":"# Pocket Exporter\n\nA 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.\n\n\u003e [!IMPORTANT]\n\u003e ***Still working as of 2025-07-08: You can still grab your GraphQL request after logging in to https://getpocket.com/home***\n\n## 🚨 Why This Tool Exists\n\nMozilla is [shutting down Pocket in October 2025](https://getpocket.com/farewell) and will delete all user data. Their official export only provides a basic CSV with URLs and titles - no article content, no tags, no images, nothing else. This tool uses Pocket's internal APIs to export **everything**.\n\n## ✨ Features\n\n- **Complete Article Export**: Full text content, not just URLs\n- **All Metadata**: Tags, favorites, authors, excerpts, reading time\n- **Images \u0026 Media**: Featured images and embedded content\n- **Multiple Formats**: JSON for data portability, ZIP for archival\n- **Pocket Premium Content**: Exports your \"Permanent Library\" articles\n- **Privacy First**: All data stays on your machine, deletable anytime\n- **Open Source**: Fully auditable code\n\n![image](https://github.com/user-attachments/assets/6319356a-c0cf-4b45-8985-d300f07d1b9c)\n\n\n## 🎯 Quick Start\n\n### Using the Hosted Version\n\n1. Visit [https://pocket.archivebox.io](https://pocket-exporter.archivebox.io) (or your self-hosted instance)\n2. Follow the authentication steps to connect your Pocket account\n3. Start exporting (free for up to 100 articles, $8 one-time fee for unlimited, because hosting costs money)\n\n### Self-Hosting with Docker\n\n```bash\n# Clone the repository\ngit clone https://github.com/ArchiveBox/pocket-exporter\ncd pocket-exporter\n\n# Copy environment variables\ncp .env.example .env\n# Edit .env with your Stripe keys (optional, for payment processing)\n\n# Run with Docker Compose\ndocker-compose up -d\n```\n\nVisit http://localhost:3000 to access the exporter.\n\n## 📊 Export Data Format\n\n### Directory Structure\n```\nsessions/\n└── {session-id}/\n    ├── session.json          # Session metadata\n    ├── payments.json         # Payment status (if applicable)\n    └── articles/\n        ├── {article-id}/\n        │   ├── index.json    # Article metadata\n        │   ├── article.html  # Pocket's archived HTML\n        │   ├── original.html # Original source HTML (if available)\n        │   ├── top_image.jpg # Featured image\n        │   └── image_*.jpg   # Article images\n        └── ...\n```\n\n### Article JSON Schema\n```json\n{\n  \"_createdAt\": 1745783047,\n  \"_updatedAt\": 1745783047,\n  \"title\": \"Article Title\",\n  \"url\": \"https://example.com/original/article/url\",\n  \"savedId\": \"956339233\",\n  \"status\": \"UNREAD\",\n  \"isFavorite\": false,\n  \"favoritedAt\": null,\n  \"isArchived\": false,\n  \"archivedAt\": null,\n  \"tags\": [\n    {\"id\": \"ZGF0YWJhc2VzX194cGt0eHRhZ3hfXw==\", \"name\": \"databases\"},\n  ],\n  \"annotations\": {\n    \"highlights\": []\n  },\n  \"item\": {\n    \"isArticle\": true,\n    \"title\": \"Article Title\",\n    \"shareId\": \"2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03\",\n    \"itemId\": \"956339233\",\n    \"readerSlug\": \"2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03\",\n    \"resolvedId\": \"956339233\",\n    \"resolvedUrl\": \"https://example.com/original/article/url\",\n    \"domain\": null,\n    \"domainMetadata\": {\"name\": \"example.com\"},\n    \"excerpt\": \"Exceprt of article text...\",\n    \"hasImage\": \"HAS_IMAGES\",   // or NO_IMAGES\n    \"hasVideo\": \"HAS_VIDEOS\",   // or NO_VIDEOS\n    \"images\": [\n        {\n        \"caption\": \"Some image caption\",\n        \"credit\": \"Some image credit...\",\n        \"height\": 200,\n        \"imageId\": 1,\n        \"src\": \"https://example.com/some/image/url.png\",\n        \"width\": 200\n      },\n    ],\n    \"videos\": [\n      {\n        \"vid\": \"\",\n        \"videoId\": 1,\n        \"type\": \"HTML5\",\n        \"src\": \"https://example.com/some/video.mp4\"\n      }\n    ],\n    \"topImageUrl\": \"https://example.com/original/article/url/image.png\",\n    \"timeToRead\": 7,\n    \"givenUrl\": \"https://example.com/original/article/url\",\n    \"collection\": null,\n    \"authors\": [{\"id\": \"23432434\", \"name\": \"Article Author Name\", \"url\": \"https://example.com/author/url\"}],\n    \"datePublished\": \"2024-06-14T21:32:00.000Z\",\n    \"syndicatedArticle\": null,\n    \"preview\": {\n      \"previewId\": \"2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03\",\n      \"id\": \"2e3dtp25T247ec458bAfnIkA3cgdT9f8f71kafc603h224x02ebdfl19a5ekj2d4_1a8c2a615b265f6c7e627dd9ecc14e03\",\n      \"image\": ... same format as above images ...,\n      \"excerpt\": \"Exceprt of article text...\",\n      \"title\": \"Article Title\",\n      \"authors\": null,\n      \"domain\": {\n        \"name\": \"example.com\"\n      },\n      \"datePublished\": \"2024-06-14T21:32:00.000Z\",\n      \"url\": \"https://example.com/original/article/url\"\n    }\n  },\n  \"archivedotorg_url\": \"https://web.archive.org/web/https://example.com/original/article/url\"\n}\n```\n\n## 🔐 Authentication Process\n\nThe tool requires your Pocket session cookies to access your data:\n\n1. Log into [getpocket.com](https://getpocket.com) using Chrome (Firefox not supported yet)\n2. Open Developer Tools (F12)\n3. Go to Network tab\n4. Find any `graphql` request to getpocket.com\n5. Right-click → Copy → Copy as fetch (Node.js)\n6. Paste into the exporter\n\nYour credentials are only used to fetch your data and can be deleted anytime.\n\nAfter you fetch the first 100 articles succesfully, the payment form will pop up and ask for payment to continue with the full export.\n\n![image](https://github.com/user-attachments/assets/d0b9452f-fd62-4cee-8d4a-daa5bbc29205)\n\n\n## 🛠️ Development Setup\n\n### Prerequisites\n- Node.js 20+\n- npm or yarn\n- (Optional) Stripe account for payment processing\n\n### Local Development\n```bash\n# Install dependencies\nnpm install\n\n# Set up environment variables\ncp .env.example .env\n# Edit .env:\n# - Add Stripe keys (optional)\n# - Set NEXT_PUBLIC_BASE_URL (optional)\n\n# Run development server\nnpm run dev\n\n# Build for production\nnpm run build\nnpm start\n```\n\n### Environment Variables\n```env\n# Stripe (optional, for payments)\nSTRIPE_SECRET_KEY=sk_test_...\nNEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...\nSTRIPE_WEBHOOK_SECRET=whsec_...\n\n# Base URL (optional)\nNEXT_PUBLIC_BASE_URL=http://localhost:3000\n```\n\n## ⚠️ Caveats \u0026 Limitations\n\n1. **Rate Limiting**: Pocket's API has rate limits. The tool automatically handles these with retries.\n2. **Large Libraries**: Most exports complete in \u003c15min, some accounts with \u003e20k articles can hit hourly ratelimits (adds +1 hour of time)\n3. **Authentication**: Pocket cookies expire after ~2 weeks of inactivity / upon logout\n4. **📸 Original HTML \u0026 Images**: Pocket's archived copy of the article text is always fetched, but the original source HTML and featured images can also be exported on a per-article basis by clicking `(📸)`. This is is best-effort (as original sites may be offline), and is limited to 50mb max per article.\n\n\n## 🔧 Technical Details\n\n### Stack\n- **Frontend**: Next.js 15, React 19, Tailwind CSS\n- **Backend**: Next.js API routes\n- **Storage**: Local filesystem\n- **Payments**: Stripe Checkout (optional)\n\n### Key Features\n- Server-side pagination for large libraries\n- Concurrent article fetching with rate limit handling\n- Resumable exports (session-based)\n- Real-time progress updates via polling\n\n## 📝 Data Privacy\n\n- **No tracking**: No analytics or user tracking\n- **Local storage**: All data stored in `sessions/` directory\n- **Deletable**: One-click delete removes all your data\n- **Payment info**: Only payment status stored, no credit card data\n\n## ✨ Pocket Alternatives\n\nHere are some alternative apps that can replace Pocket.\n\n- https://linkwarden.app/ ⭐️\n- https://www.unpocket.me\n- https://github.com/hoarder-app/hoarder (aka Karakeep)\n- https://github.com/ArchiveBox/ArchiveBox\n- https://raindrop.io\n- https://linkding.link/\n- https://fika.bar/\n- https://doublememory.com/\n- https://listy.is/import/pocket/\n- https://www.maxai.co/getpocket/export-pocket-list/\n- https://dailyintel.co/migrate\n- https://glasp.co/login?callback_url=/settings/integrations\n- https://www.maketecheasier.com/import-instapaper-to-pocket/\n- https://obsidian.rocks/the-best-free-pocket-alternative-obsidian/\n- https://docs.readwise.io/reader/docs/faqs/importing-content\n- https://doc.wallabag.org/user/import/pocket/\n- And more here: https://github.com/ArchiveBox/ArchiveBox/wiki/Web-Archiving-Community#bookmarking-services\n\n**Other export tools:**\n\n- https://tildegit.org/exquisitecorp/bookmobile\n- https://github.com/thgossler/pocket-bookmark-export\n- https://github.com/karlicoss/pockexport\n- https://github.com/LudWittg/Pocket-exporter\n- https://github.com/cshtdd/pocket-data-exporter\n- https://github.com/brpaz/pocket-exporter\n- https://github.com/open-pocket/open-pocket\n\n## 📄 License\n\nMIT License\n\n## 🙏 Acknowledgments\n\nBuilt with frustration after discovering Pocket's official export is essentially useless for archival purposes. Special thanks to everyone who helped test this.\n\n## 🔗 Related Links\n\n- [ArchiveBox](https://github.com/ArchiveBox/ArchiveBox) - Self-hosted internet archiving\n- [Pocket Shutdown Annoucement Post](https://getpocket.com/farewell) - Their official announcement of shutdown in Oct 2025\n- [Pocket API Documentation](https://getpocket.com/developer/) - Official (extremely limited) API\n- [Pocket CSV Export](https://support.mozilla.org/en-US/kb/exporting-your-pocket-list) - Official (extremely limited) CSV export\n- [r/DataHoarder Discussion Thread](https://www.reddit.com/r/DataHoarder/comments/1lkgbbh/psa_export_all_your_pocket_bookmarks_and_saved/) - Discussion about this projeect\n\n---\n\n**Remember**: Export your data before October 2025! Once Pocket shuts down, your articles will be gone forever.\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FArchiveBox%2Fpocket-exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FArchiveBox%2Fpocket-exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FArchiveBox%2Fpocket-exporter/lists"}