Install
openclaw skills install chat-liftImport, search, and archive AI conversations from ChatGPT, Claude, and Gemini. Clean indexed formats, full-text search, static HTML archive. No server required.
openclaw skills install chat-liftImport, search, and archive AI conversations from ChatGPT, Claude, and Gemini. Clean indexed formats, full-text search, static HTML archive. No server required.
Import, search, and archive your AI conversations.
Extract ChatGPT, Claude, and Gemini conversation exports into clean, indexed formats. Full-text search. Static HTML archive with search bar. No server required.
ChatLift converts AI conversation exports into portable, searchable formats:
AI chat platforms:
ChatLift gives you control:
No dependencies! Python 3.7+ stdlib only.
# Copy config (optional)
cp config_example.py config.py
Export your conversations from ChatGPT, Claude, or Gemini, then:
# Import ChatGPT export
python3 chat_lift.py chatgpt conversations.json
# Import Claude export
python3 chat_lift.py claude claude-export.json
# Import Gemini export
python3 chat_lift.py gemini gemini-conversations.json
Generates:
chat-archive/markdown/*.md - Human-readable markdownchat-archive/html/*.html - Styled HTML pageschat-archive/json/*.json - Structured JSON# Search all conversations
python3 chat_search.py search --query "machine learning"
# Search with regex
python3 chat_search.py search --query "python.*async" --regex
# Search by date range
python3 chat_search.py date --start-date 2026-01-01 --end-date 2026-02-01
# Get archive statistics
python3 chat_search.py stats
# Generate static archive website
python3 chat_archive.py
# Open chat-archive/web/index.html in browser
The HTML archive includes:
# Import all your platforms
python3 chat_lift.py chatgpt chatgpt-export.json
python3 chat_lift.py claude claude-export.json
python3 chat_lift.py gemini gemini-export.json
# Generate unified archive
python3 chat_archive.py
from chat_search import ConversationSearcher
searcher = ConversationSearcher('chat-archive')
# Find all conversations mentioning "agent"
results = searcher.search('agent')
for result in results:
print(f"{result['conversation']['title']}")
print(f" Source: {result['conversation']['source']}")
print(f" Matches: {result['total_matches']}\n")
# Only generate markdown
python3 chat_lift.py chatgpt export.json --formats markdown
# Generate all formats
python3 chat_lift.py chatgpt export.json --formats markdown html json
# Custom output directory
python3 chat_lift.py chatgpt export.json --output-dir ~/my-chats
# Search only ChatGPT conversations
python3 chat_search.py search --query "python" --source chatgpt
# Search only user messages
python3 chat_search.py search --query "explain" --role user
# Case-sensitive search
python3 chat_search.py search --query "API" --case-sensitive
conversations.json# Conversation Title
**Source:** chatgpt
**ID:** abc123def456
**Created:** 2026-02-21 10:30:00
---
## USER
How do I deploy a Flask app?
*2026-02-21 10:30:15*
---
## ASSISTANT
Here's how to deploy a Flask application...
*2026-02-21 10:30:45*
---
{
"id": "abc123def456",
"title": "Conversation Title",
"source": "chatgpt",
"create_time": 1708512600,
"messages": [
{
"role": "user",
"content": "How do I deploy a Flask app?",
"timestamp": 1708512615
},
{
"role": "assistant",
"content": "Here's how to deploy a Flask application...",
"timestamp": 1708512645
}
]
}
Clean, styled HTML with:
chat-archive/
├── markdown/ # Human-readable markdown
│ ├── abc123.md
│ └── def456.md
├── html/ # Styled HTML pages
│ ├── abc123.html
│ └── def456.html
├── json/ # Structured JSON
│ ├── abc123.json
│ └── def456.json
└── web/ # Static HTML archive
├── index.html # Browse/search interface
├── abc123.html # Conversation pages
├── def456.html
├── style.css # Styling
└── search.js # Search functionality
# Simple text search
python3 chat_search.py search --query "machine learning"
# Case-sensitive
python3 chat_search.py search --query "API" --case-sensitive
# Regex patterns
python3 chat_search.py search --query "python.*async" --regex
# Filter by source platform
python3 chat_search.py search --query "code" --source chatgpt
# Filter by message role
python3 chat_search.py search --query "explain" --role assistant
# Combine filters
python3 chat_search.py search --query "deploy" --source claude --role user
# Conversations from specific date range
python3 chat_search.py date --start-date 2026-01-01 --end-date 2026-02-01
# All conversations after date
python3 chat_search.py date --start-date 2026-02-01
# All conversations before date
python3 chat_search.py date --end-date 2026-02-01
python3 chat_search.py stats
Shows:
Edit chat-archive/web/style.css to customize:
The archive is pure HTML/CSS/JS - modify freely.
from chat_lift import ConversationImporter
from chat_search import ConversationSearcher
from chat_archive import ArchiveGenerator
# Import conversations
importer = ConversationImporter('chat-archive')
conversations = importer.import_chatgpt('export.json')
for conv in conversations:
importer.save_conversation(conv, formats=['markdown', 'json'])
# Search
searcher = ConversationSearcher('chat-archive')
results = searcher.search('python programming')
# Generate HTML archive
generator = ArchiveGenerator('chat-archive')
generator.generate_archive()
import glob
from chat_lift import ConversationImporter
importer = ConversationImporter('chat-archive')
# Import all ChatGPT exports in directory
for export_file in glob.glob('exports/chatgpt-*.json'):
conversations = importer.import_chatgpt(export_file)
for conv in conversations:
importer.save_conversation(conv)
print("All exports imported!")
See LIMITATIONS.md for details.
Key constraints:
MIT License - See LICENSE
Author: Shadow Rose
Your AI conversations are valuable:
But they're locked in proprietary platforms that:
ChatLift gives you:
Take back your conversation history.
This software is provided "AS IS", without warranty of any kind, express or implied.
USE AT YOUR OWN RISK.
By downloading, installing, or using this software, you acknowledge that you have read this disclaimer and agree to use the software entirely at your own risk.
| 🐛 Bug Reports | TheShadowyRose@proton.me |
| ☕ Ko-fi | ko-fi.com/theshadowrose |
| 🛒 Gumroad | shadowyrose.gumroad.com |
| @TheShadowyRose | |
| 🐙 GitHub | github.com/TheShadowRose |
| 🧠 PromptBase | promptbase.com/profile/shadowrose |
Built with OpenClaw — thank you for making this possible.
🛠️ Need something custom? Custom OpenClaw agents & skills starting at $500. If you can describe it, I can build it. → Hire me on Fiverr