Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A Slack link unfurl is the preview attached to a URL in a message. For a normal website, the quickest “image generator” is not a separate graphics service: add Open Graph or X Card metadata to the page and let Slack crawl it. If an application must choose the image and text at message time, register the domain with a Slack app, handle the link_shared event, and call chat.unfurl with the preview you want.

This guide explains both routes, shows implementation patterns, and covers the cases that make previews disappear or render differently than expected.

Choose the right unfurl route

Route Best for Control Main dependency
Classic metadata unfurl Website owners who want Slack to derive a preview from each page Page title, description, image and URL metadata Slack must be able to fetch the page
Custom Slack app unfurl Apps that generate different content for matching links The app chooses the preview payload and can react to link events Registered domain, Events API handling and links:write

Start with classic metadata when one preview per URL is sufficient. Use a custom app when the image depends on account data, permissions, a document state, or another value that is unavailable in static page metadata.

How classic Slack link previews work

Slack’s default behavior is to crawl a shared URL and look for common Open Graph and X Card fields. When it can read usable data, it attaches a preview with the page title, description and image. Slack describes these attachments as adding context and continuity to conversations.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
SOURBEAR Desktop Status Deck - 30 Flip Desk Status Signs, 90 Affirmations
  • FLIP A CARD, SIGNAL YOUR STATUS, SET BOUNDARIES WITHOUT SAYING A WORD - Stop interruptions before they start. Flip the deck to Deep Work, Deadline Mode, Do Not Disturb, In a Meeting, Out to Lunch, or Free to Chat, and the whole office knows where you stand. The functional desk status sign that does what a wall sign or Slack badge can't, visible at a glance, changeable in a second, no setup, no notifications.
  • 30 OFFICE STATUS CARDS + 90 DAILY AFFIRMATIONS IN ONE STAND - Front of each card shows your status. Flip it and the back gives you three short affirmations to actually power through the task. Covers every workday mood: Crunching Numbers, Loading Caffeine, Currently Panicking, Feeling Zen, System Update, Just Surviving, Out of Patience, Not Enough Coffee, Overwhelmed, Rebooting, and 20 more. One deck replaces a stack of door signs and a stack of motivational cards.
  • BUILT TO LIVE ON YOUR DESK - Heavy 250gsm coated card stock, matte-laminated covers, sturdy white spiral binding on a self-standing easel back. Cards measure 4.1 × 5.2 inches (10.4 × 13.2 cm) visible from across the room, small enough to fit any cubicle shelf, monitor stand, bookcase, or work from home desk. Double-sided printing, full color, no assembly.
  • THE COWORKER GIFT THAT ACTUALLY GETS USED - Funny enough to draw a laugh on the first flip, useful enough to stay on the desk for years. Perfect for coworker birthdays, employee appreciation week, work anniversaries, boss gifts, new hire welcome kits, secret santa, white elephant exchanges, manager and mentor thank yous, or end of year teacher appreciation. The rare desk accessory people actually keep.
  • RECHARGE YOUR WORKDAY, ONE FLIP AT A TIME - A small daily ritual that protects your focus, lifts your mood, and adds a bit of humor to the grind. Set boundaries. Signal availability. Boost your mood. Whether you're in a cubicle, a corner office, or working from your kitchen table, the deck travels with you and earns its spot on the desk every day.

Add preview metadata to the HTML head

Place one canonical set of tags in the <head> of every page you want expanded:

<title>Acme status dashboard</title>
<meta name="description" content="Current service status and incident history.">
<link rel="canonical" href="https://example.com/status">

<meta property="og:type" content="website">
<meta property="og:url" content="https://example.com/status">
<meta property="og:title" content="Acme status dashboard">
<meta property="og:description" content="Current service status and incident history.">
<meta property="og:image" content="https://example.com/images/status-card.png">

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Acme status dashboard">
<meta name="twitter:description" content="Current service status and incident history.">
<meta name="twitter:image" content="https://example.com/images/status-card.png">

Make the image fetchable

  • Use an absolute HTTPS image URL, not a relative path.
  • Serve the image without a login session, password prompt or expiring authorization token.
  • Return the correct image MIME type and a complete response rather than HTML, a redirect loop or a blocked request.
  • Keep the title, description and image specific to the URL. A site-wide default can produce misleading previews.

Dynamic pages and server rendering

If your tags are inserted only after JavaScript runs in a browser, a crawler may never see them. Render the tags in the initial HTML response or provide server-side rendering. Verify the raw response with an HTTP client and inspect the exact URL that users paste into Slack.

Build a custom app unfurl

A custom unfurl follows Slack’s app workflow: the app handles links on a domain registered with the app, receives a link_shared event, and supplies the preview through chat.unfurl. The method requires the links:write scope. An app that also needs to read relevant posted links uses links:read as described in Slack’s link-unfurling workflow.

Rank #2
Aesthetic Desk Organizer Set of 3 - Sturdy Concrete Office Accessories
  • Ultimate Set To Stay Organized & Inspired: KIBAGAs’ desk organizer set including a 2.75x2.75x3.75 pen holder, a 3.5x3.5x1.5” notes holder and a 3x3x1.1 metal clip holder is here for you to create a welcoming area dedicated to focus, learning, creating and thriving
  • Efficient & Streamlined Office Desk Organization: Organizational mastery paves the way for excellence! Maximize productivity with the desk organizers and accessories holder by easily store, pens, clips & notes and keeping your workspace clutter-free and tidy!
  • Aesthetic & Modern Desk Organizer and Storage: Embrace the beauty of nature in your office organization! Crafted from concrete with a clean, minimalist approach, the desk accessories & workspace organizers seamlessly blend with any desk decor & office environment
  • Made-To-Last Desktop Organizer: Elevate your workspace with the sleek concrete office desk accessories! The desk organizer set not only enhances the visual appeal of your office with a statement piece but thanks to top-notch materials durability is also ensured
  • Versatile Office Solution: Designed to beautifully display and organize your office accessories, the desk organizer set offers a comprehensive solution for keeping your workspace orderly, but also brings neat organization to kids’ rooms, bathrooms & other areas

App setup checklist

  1. Create or select a Slack app and register the domain whose links it will handle.
  2. Request the required permission, including links:write for unfurling.
  3. Subscribe the app to link-sharing events and expose a reachable Events API endpoint.
  4. Verify Slack’s URL challenge and authenticate incoming requests before processing events.
  5. When a matching event arrives, build the preview and call chat.unfurl for the event’s channel, message timestamp and link.

Illustrative Node.js handler

The following pattern uses Slack’s Web API client. Substitute your own request-signature verification, event URL challenge handling and preview-generation logic.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
import express from 'express';
import { WebClient } from '@slack/web-api';

const app = express();
app.use(express.json());
const slack = new WebClient(process.env.SLACK_BOT_TOKEN);

app.post('/slack/events', async (req, res) => {
  const body = req.body;
  if (body.type === 'url_verification') {
    return res.json({ challenge: body.challenge });
  }
  res.sendStatus(200); // acknowledge quickly

  if (body.event?.type !== 'link_shared') return;
  const event = body.event;
  const link = event.links?.[0];
  if (!link || !link.url.startsWith('https://example.com/')) return;

  try {
    await slack.chat.unfurl({
      channel: event.channel,
      ts: event.message_ts,
      unfurls: {
        [link.url]: {
          blocks: [
            { type: 'section', text: { type: 'mrkdwn', text: `*${link.url}*` } },
            { type: 'image', image_url: 'https://example.com/images/status-card.png', alt_text: 'Status dashboard' }
          ]
        }
      }
    });
  } catch (error) {
    console.error('Unfurl failed', error);
  }
});

app.listen(process.env.PORT || 3000);

In production, process every link in the event that belongs to your registered domain, make the handler idempotent, and queue slow image generation so the event acknowledgement is not delayed. Never place a user token or signing secret in client-side code.

Composer previews versus posted-message unfurls

Slack distinguishes a link still being composed from a link already posted. The preview field can affect a composer preview, but Slack says it is ignored when the unfurl is for a link in a posted message. For posted messages, provide the unfurl through the documented chat.unfurl flow and use the message timestamp supplied by the event.

Rank #3
Sale
SKYDUE Blue Desk Accessories 11Pcs with Rotating Pen Holder for Desk
  • Desk Organizers and Accessories Set: Office Supplies set includes a variety of essential office items,1 x 360-degree rotating pen holders, 1 x staplers, 1 x staple removers, 1000 x staples, 1 x scissors,1 x tape dispenser, binder clips & paper clips & push pins kit, 2 x tapes.This rich content make your workspace convenient and efficient
  • Premium Materials: Our office supplies are made from high-quality materials including metal, plastic, and acrylic. These materials ensure durability, wear-resistance, and a smooth, shiny finish that is easy to clean and maintain
  • Aesthetic and Practical Design: The office supplies sets are designed to be both elegant and functional. They enhance the aesthetics of the workspace with their stylish designs and colors, Unique designs 360-degree rotating pen holders keeping the desk tidy and organize
  • Multi-functional Use: The desk organizers and accessories can be used not only in office settings but also at home, in classrooms, and other environments. They can store and organize various items such as, pens, remote control and even cosmetics or kitchen supplies
  • Gift-Worthy Packaging: Office desktop organizer sets are suitable for various occasions such as birthdays, holidays, Christmas, and back-to-school. They are appropriate for students, teachers, office workers, and anyone who appreciates organized and aesthetically pleasing desk setups

Designing the generated image

Whether the image is static metadata or generated by an app, make the important information readable at Slack’s compact card size. Put the page or record name in large type, use strong contrast, and avoid text near the edges. Generate a stable image URL when possible; a URL that expires before Slack fetches it can produce a text-only preview. If a record is private, do not expose confidential data in a public image merely to make an unfurl work.

Work Objects full-size image and PDF previews

Slack’s Work Objects documentation has additional delivery requirements for the described full-size image or PDF preview. The preview URL must be publicly accessible, return the appropriate MIME type, and include a CORS response header allowing https://app.slack.com. A thumbnail that works in a normal message is not automatically sufficient for this full-size experience.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why a Slack preview is missing

  • No usable metadata: add Open Graph or X Card fields to the initial HTML response.
  • Private or password-protected page: Slack cannot authenticate as a normal workspace member, so expose only a deliberately public preview endpoint.
  • Recently shared URL: some links do not expand immediately. Try again after the page is available and metadata has propagated.
  • Unsupported media host: Slack lists certain audio and video services among hosts that may not unfurl.
  • More than five links in one message: Slack lists this as a reason previews may not appear.
  • Workspace preference: website image and text previews can be disabled by members, while owners and admins can manage settings for specific websites.
  • App configuration error: verify the domain registration, event subscription, token scope and that the app receives the expected link_shared event.

Debugging procedure

  1. Fetch the exact shared URL without cookies and confirm the response is successful HTML.
  2. Inspect the raw head for absolute og:image, title and description values.
  3. Fetch the image URL independently and verify its MIME type, status and accessibility.
  4. Post one link in a test channel, avoiding a message with more than five links.
  5. For an app, log the event ID, channel, message timestamp, URL and API response while keeping tokens and signatures redacted.
  6. For Work Objects full-size previews, check the public URL and the Access-Control-Allow-Origin: https://app.slack.com response header.

Or skip the browser setup

If your “Slack link unfurl image generator” starts with taking a clean screenshot of a page, ScreenshotNeo can return the image directly from one API request. It accepts a URL and can return PNG, JPEG or WebP; it removes cookie-consent banners, newsletter popups and chat widgets before capture. Bot checks, blank pages, timeouts, failed loads and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers.

Use the ScreenshotNeo documentation for all options. A minimal cURL request is:

Rank #4
Sale
Modern Aesthetic Desk Accessories Set of 3 - Stylish Concrete Organizers
  • Ultimate Desk Organizer Set for Focus & Inspiration: Transform your workspace with KIBAGA’s concrete desk organizer set, featuring a pen holder, a notes holder, and a metal clip holder. This thoughtfully designed set helps you create a neat and welcoming space for focus, creativity, and productivity, making it the perfect companion for learning, working, and thriving.
  • Efficient & Simplified Office Desk Organization: Organizational mastery paves the way for excellence! Maximize productivity with the desk organizers and accessories holder by easily store, pens, clips & notes and keeping your workspace clutter-free and tidy!
  • Aesthetic & Modern Desk Organizer and Storage: Embrace the beauty of nature in your office organization! Crafted from concrete in a classic black color, the desk accessories & workspace organizers seamlessly blend with any desk decor & office environment
  • Made-To-Last Desktop Organizer: Elevate your workspace with the sleek concrete office desk accessories! The desk organizer set not only enhances the visual appeal of your office with a statement piece but thanks to top-notch materials durability is also ensured
  • Versatile Office Solution: Designed to beautifully display and organize your office accessories, the desk organizer set offers a comprehensive solution for keeping your workspace orderly, but also brings neat organization to kids’ rooms, bathrooms & other areas
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
const image = Buffer.from(await res.arrayBuffer());

ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients. The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Operational and cost considerations

Classic metadata

Metadata has no app hosting or API call to maintain, but you give up per-message control. Changes may not appear instantly when Slack has already fetched a URL, so use versioned image URLs when you must force a new asset.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Custom apps

Custom unfurls provide precise control but add token management, event verification, retries and monitoring. Cache generated images and deduplicate events so a repeated share does not trigger unnecessary work. Return quickly from the event endpoint and perform expensive rendering asynchronously.

Best Value
Sale
Modern Aesthetic Desk Accessories Set of 3 - Stylish Concrete Organizers
  • Ultimate Desk Organizer Set for Focus & Inspiration: Transform your workspace with KIBAGA’s concrete desk organizer set, featuring a pen holder, a notes holder, and a metal clip holder. This thoughtfully designed set helps you create a neat and welcoming space for focus, creativity, and productivity, making it the perfect companion for learning, working, and thriving.
  • Efficient & Simplified Office Desk Organization: Organizational mastery paves the way for excellence! Maximize productivity with the desk organizers and accessories holder by easily store, pens, clips & notes and keeping your workspace clutter-free and tidy!
  • Aesthetic & Modern Desk Organizer and Storage: Embrace the beauty of nature in your office organization! Crafted from concrete in a stylish gray color, the desk accessories & workspace organizers seamlessly blend with any desk decor & office environment
  • Made-To-Last Desktop Organizer: Elevate your workspace with the sleek concrete office desk accessories! The desk organizer set not only enhances the visual appeal of your office with a statement piece but thanks to top-notch materials durability is also ensured
  • Versatile Office Solution: Designed to beautifully display and organize your office accessories, the desk organizer set offers a comprehensive solution for keeping your workspace orderly, but also brings neat organization to kids’ rooms, bathrooms & other areas

Privacy

Treat every image URL as potentially retrievable by anyone who can access the message. Do not place secrets, private customer information or authorization headers in a public preview asset.

FAQ

Can I force Slack to use my generated image for every link?

Only for links handled by a custom app on its registered domain. Otherwise Slack decides what to display from the page’s metadata and its own fetching rules.

Why does the same URL unfurl for one teammate but not another?

Workspace preview preferences can differ, and owners or admins can manage website-specific preview settings. Check those settings before changing your HTML.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Does an image alone create a complete unfurl?

No. Slack may also need readable title, description and URL metadata, or a complete custom unfurl payload from your app.

Frequently Asked Questions

What is the minimum metadata for a Slack image preview?

Provide absolute, publicly fetchable Open Graph title, description, URL and image tags in the initial HTML response; X Card tags are useful as an additional metadata set.

Which permission does a custom app need to unfurl posted links?

Slack documents the links:write scope for the chat.unfurl method.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.