# Save Slack messages and threads as PDFs Slack to PDF for messages, threads and channels. Save a conversation as a clean, readable PDF record automatically with Zapier, Make or n8n. **Quick answer.** Pick a trigger, like adding a certain emoji to a message. Your automation collects the message or thread, puts it into a template, html-pdf.com turns it into a PDF, and the PDF is posted back to Slack or saved to your drive. ## What you'll build React to a message with a page emoji and get a PDF of the whole thread a few seconds later. Save every decision posted in #approvals as a dated PDF. Send a client a tidy copy of a shared channel conversation at the end of a project. The PDF shows names, times and messages in a clean layout, without the Slack sidebar and buttons a screenshot would include. ## What you need - **A Slack workspace** where you can add apps. - **Zapier**, **Make** or **n8n**, connected to Slack. - **A design.** The [report template](https://html-pdf.com/templates/report) works well as a wrapper. A template is a ready made page design, so you only change the text. - **An API key** from [html-pdf.com](https://html-pdf.com/login). You get 100 free pages once, with no card. ## Step by step with Zapier (single message) 1. **Trigger.** Create a Zap with **Slack** and the event **New Reaction Added**. Choose the emoji, for example `page_facing_up`. 2. **Make the PDF.** Add **Webhooks by Zapier → Custom Request**. Method `POST`, URL `https://html-pdf.com/v1/pdf`. 3. **Headers.** `Authorization` with `Bearer hp_live_...` and `Content-Type` with `application/json`. 4. **Data.** Paste the JSON below and map the message text, author, channel and time. 5. **Deliver.** Add **Slack → Send Channel Message** with the `url`, or **Google Drive → Upload File** to keep a copy. ```json { "html": "
Priya Shah 10 Oct 2026, 15:42
Approved the Q4 budget at 48,000 EUR. Go ahead with the vendor contract.
", "filename": "approval-2026-10-10.pdf", "response": "url" } ``` The `url` is a download link that works for 24 hours, so save the file somewhere if you need it for longer. See the [Zapier guide](https://html-pdf.com/guides/zapier). ## Step by step with n8n (whole thread) Threads have many replies, so n8n or Make is the better fit. 1. **Trigger.** Add a **Slack Trigger** node listening for reactions, or a **Schedule Trigger** for a daily channel export. 2. **Get the replies.** Add an **HTTP Request** node calling Slack's `conversations.replies` with the channel and the message `ts`, using your Slack credentials. 3. **Build the page.** Add a **Code** node that turns each reply into a block with the name, time and text. 4. **Make the PDF.** Add an **HTTP Request** node posting to `https://html-pdf.com/v1/pdf`. Set the response format to **File**. 5. **Deliver.** Use the **Slack** node to upload the file to the thread, or save it to Google Drive. The same flow in Make uses **Slack → Make an API Call** and **HTTP → Make a request**. See the [n8n guide](https://html-pdf.com/guides/n8n) and [Make guide](https://html-pdf.com/guides/make). ## Code path for developers With a Slack bot token that can read history, a thread export is a short script. ```js const { messages } = await (await fetch( `https://slack.com/api/conversations.replies?channel=${process.env.CHANNEL}&ts=${process.env.THREAD_TS}`, { headers: { Authorization: `Bearer ${process.env.SLACK_TOKEN}` } } )).json(); const body = messages.map(m => { const time = new Date(Number(m.ts) * 1000).toLocaleString("en-GB"); return `${m.text}