ChatGPT Conversation Scraper avatar

ChatGPT Conversation Scraper

Pricing

from $4.50 / 1,000 scraped conversations

Go to Apify Store
ChatGPT Conversation Scraper

ChatGPT Conversation Scraper

Scrape public ChatGPT shared links. Export full conversations with messages, roles, timestamps, model metadata, code blocks, and source evidence.

Pricing

from $4.50 / 1,000 scraped conversations

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

ChatGPT Conversation Scraper extracts complete public shared conversations from ChatGPT share links. Paste one or more chatgpt.com/share/... or chat.openai.com/share/... URLs and get a clean dataset with conversation title, share ID, model, timestamps, full messages, roles, message IDs, statuses, and code blocks.

Use this ChatGPT conversation scraper when you need to archive public shared chats, review prompt and response patterns, collect examples for documentation, or export conversations into your own database, spreadsheet, API workflow, or analysis pipeline. The Actor reads public shared links only. It does not ask for ChatGPT cookies, credentials, login details, or private conversation access.

For a quick first run, keep the prefilled public ChatGPT shared URL. It returns a complete conversation row with nested messages so you can review the output shape before adding your own links.

✅ What this Actor does

  • Scrapes public ChatGPT shared conversation URLs.
  • Accepts both chatgpt.com/share/... and old chat.openai.com/share/... links.
  • Saves one dataset row per successfully scraped shared conversation.
  • Returns the full visible message list in source order.
  • Preserves message roles such as user, assistant, system, or tool when ChatGPT exposes them.
  • Extracts readable message text and code blocks.
  • Adds source-backed conversation metadata such as title, share ID, model, created time, updated time, and message count when available.
  • Optionally attaches rendered HTML and source conversation JSON for audit workflows.
  • Skips unusable links without creating placeholder error rows.
  • Works with Apify exports, API access, schedules, webhooks, and integrations.

📊 ChatGPT data you can export

Each dataset item is one public shared ChatGPT conversation.

Data groupFields
Conversation identityshareId, title, model
TimingcreatedAt, updatedAt
CompletenessmessageCount, messages
Message detailsmessageId, role, index, text, createdAt, status
Code blockscodeBlocks[].language, codeBlocks[].text
Extra source metadatagizmoId, plugins
Optional audit evidencesourceContent.renderedHtml, sourceContent.conversationJson

ChatGPT may not expose every metadata field on every shared link. Nullable fields are returned as null when the public share page does not provide them.

🚀 How to run it

  1. Open the Input tab.
  2. Add one or more public ChatGPT shared conversation URLs.
  3. Keep Preserve source content off for normal exports.
  4. Turn Preserve source content on only when you need rendered HTML and source JSON attached to each saved conversation.
  5. Start the Actor and open the dataset.

You control the run size by submitting fewer or more shared URLs. Invalid, private, expired, deleted, or unsupported links are reported in the run log and do not create dataset rows.

🧾 Input example

{
"startUrls": [
{
"url": "https://chatgpt.com/share/693011c8-0a3c-8006-b6cf-77d844d1bb51"
}
],
"preserveSourceContent": false
}

📦 Output example

{
"shareId": "693011c8-0a3c-8006-b6cf-77d844d1bb51",
"title": "TikTok script creation",
"model": "gpt-5-1",
"createdAt": "2025-12-03T10:32:40.044Z",
"updatedAt": "2025-12-03T10:32:45.106Z",
"messageCount": 45,
"messages": [
{
"messageId": "msg_abc123",
"role": "user",
"index": 0,
"text": "Create a TikTok script for a product launch.",
"createdAt": "2025-12-03T10:32:40.044Z",
"status": "finished_successfully",
"codeBlocks": []
},
{
"messageId": "msg_def456",
"role": "assistant",
"index": 1,
"text": "Here is a concise launch script...",
"createdAt": "2025-12-03T10:32:45.106Z",
"status": "finished_successfully",
"codeBlocks": [
{
"language": "python",
"text": "print(\"launch\")"
}
]
}
],
"gizmoId": null,
"plugins": [],
"sourceContent": null
}

💳 Pricing

This Actor uses pay-per-event pricing.

  • Scraped conversation is charged once for each usable public shared conversation saved to the dataset.
  • Preserved source content is charged only when Preserve source content is enabled and source evidence is attached to a saved conversation.
  • Invalid, private, deleted, expired, unsupported, or source-unavailable links do not create primary result rows.

See the Pricing tab for the current per-event prices for your Apify plan.

⚠️ Limits and caveats

This Actor works with public ChatGPT shared links only. It cannot read private ChatGPT history, send prompts, continue conversations, log in to ChatGPT, use your ChatGPT account, or recover a share link that ChatGPT no longer exposes publicly.

The output is extracted data, not an AI summary. If you need summarization, classification, scoring, or rewriting, run that as a separate step after exporting the dataset.

❓ FAQ

🔐 Do I need a ChatGPT token or cookies?

No. The Actor reads public shared conversation pages and does not ask for ChatGPT credentials.

🧵 Does it scrape the full conversation?

Yes, for usable public shared links it saves the visible message list in source order, including roles, text, message IDs, statuses, and code blocks when ChatGPT exposes them.

The dataset contains successful conversation rows only. Bad links are easier to handle in logs than as placeholder rows mixed into your exports.

🧾 When should I preserve source content?

Use it when you need audit evidence or want to review the source HTML and conversation JSON later. Leave it off for smaller, cleaner datasets.

📝 Changelog

  • 0.0: Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

🔗 Other actors

Made with ❤️ by Maxime Dupré