Scan business cards from Slack

Upload a photo of business cards to any OCR-enabled Slack channel, react with the camera, and Viably extracts the contacts, posting a formatted table and a downloadable nine-column CSV directly in the thread. No apps, no switching tabs, and no manual entry.
Trigger
πŸ“·:camera:
Lands in
Thread, plus new contacts
Setup
2 min
Needs
Via invited to the channel

How it works

  1. 1
    Upload a photo

    Post an image of business cards to any Slack channel with the Viably OCR power enabled. A phone photo is fine, whether it is one card or a stack of them.

  2. 2
    React with the camera

    Add a :camera: or :camera_with_flash: reaction to the message. Viably detects it, downloads the image, and submits it to the OCR service.

  3. 3
    Extraction happens asynchronously

    Viably posts a queued confirmation in the thread immediately. The OCR service processes the image and POSTs the structured result back through your OCR relay endpoint.

  4. 4
    Results appear in the thread

    Viably posts a formatted contact table covering name, role, company, phone, and email, then uploads a nine-column CSV with everything it extracted, all inside the original thread.

Example Slack output

Set it up once

Three things to configure before the first scan works.

  1. A
    Enable the OCR power in your workspace

    Go to Powers β†’ OCR in your Viably dashboard and add the Slack channels where scans should be accepted. Viably ignores camera reactions in channels that are not on this list.

  2. B
    Create an OCR relay endpoint

    Go to Powers β†’ Webhook Relay and click New Relay β†’ OCR Service. Copy the relay URL and Bearer token, then hand both to your OCR service so it can POST results back to Viably. Unlike other relay types, OCR endpoints need no destination channel, because results go straight into the thread that triggered the scan.

  3. C
    Configure your OCR service

    Give your OCR service the relay URL and Bearer token from step B. When processing finishes, the service POSTs the structured result back to that URL. The payload format below gives the exact shape.

Payload format

When your OCR service finishes processing, it POSTs a JSON payload to the relay URL with Authorization: Bearer <token>. You do not need to implement this yourself, because Viably’s own OCR service handles it for you.

OCR result payload
The message field

For ocr_type: "business_cards" it is a string of pipe-delimited rows.

  • One contact per line, with \n separating rows.
  • Fields separated by a pipe, |.
  • Exactly nine fields per row, in the order given below.
  • A field may contain , for multiple values, such as two phone numbers.
Multi-part results

If your OCR service processes a large image in chunks, set part to "1/3", "2/3", "3/3". Viably accumulates each chunk, posts a table per part, and uploads the combined CSV once every part has arrived.

The 9 fields

Every business_cards row must carry exactly nine pipe-separated values, in this order. Leave a field empty by writing nothing between the pipes.

The Slack table shows only the first five fields, covering name, role, company, phone, and email, to keep it readable. The downloadable CSV always contains all nine columns.

What you get in Slack

All output is posted as a reply in the original thread, never in the channel itself.

  1. 1
    Queued confirmation

    Immediately after you react with the camera, Viably posts a message listing which images were queued for processing.

  2. 2
    Contact table, one per part

    As each result arrives, Viably posts a monospace table showing name, role, company, phone, and email for every contact in that part.

  3. 3
    CSV download on completion

    Once all parts are received, Viably uploads a contacts-<job_id>.csv file to the thread. It contains all nine fields for every extracted contact and is ready to import into any CRM or spreadsheet.

Common questions

What teams ask before they turn this on.

What do I do with a stack of cards from a conference?

Photograph them, post the photo in an OCR-enabled channel, and react with the camera emoji. Viably reads every card in the image and returns one CSV, which is the difference between an evening of typing and a two-minute job.

What is in the CSV?

Nine columns: name, title, company, email, phone, whatsapp, website, address, and notes. The table posted in Slack shows the five that matter at a glance, and the CSV carries everything for import elsewhere.

Where do the results appear?

As a reply in the original thread, never in the channel itself, so a scan does not interrupt whatever else the channel is doing.

Can the extracted contacts become CRM records?

The CSV is yours to import wherever you like. If you want contacts captured automatically and joined to leads and payments, that is what the Contacts workspace does through Webhook Relay.

Get started

Enable the OCR power for a channel. Business card scanning runs inside Slack, with no separate app for your team to install.

Add Viably to Slack