Pull live data from GitHub, Jira, and Salesforce into Coda tables. Trigger Slack messages from buttons and automations. Use 600+ service integrations without writing a single line of integration code.
Packs are Coda's extension system. Each Pack connects your doc to an external service and adds one or more of three things. Once installed, Pack features behave exactly like native Coda features — they appear in the formula bar, button action editor, and automation rules, indistinguishable from built-ins.
Pull a live snapshot of data from an external service into a Coda table. GitHub issues, Jira tickets, Salesforce accounts — each row is a real record from that service, auto-refreshing on a schedule.
New action types appear in the button and automation editor — "Post to Slack", "Create Jira ticket", "Send Gmail". These let buttons and rules interact with external services, not just Coda data.
New functions appear in formula autocomplete, namespaced to the Pack. Use Slack.GetUser() or Jira.GetIssue() anywhere you'd write a formula — in columns, canvas cells, conditions.
The Pack Gallery contains 600+ Packs built by Coda and the community. Find one, install it, authenticate once, and every feature it provides is immediately available anywhere in the doc.
A sync table pulls a snapshot of records from an external service and places them as rows in a Coda table. The data is read-only unless the Pack supports two-way sync — but you can reference, filter, and formula against it exactly like any other table.
| Sync option | How it works | Best for |
|---|---|---|
| Manual | Syncs only when you click "Sync now" | Periodic reporting, cost control |
| Daily | Auto-syncs once every 24 hours | Non-critical dashboards, summaries |
| Hourly | Auto-syncs once per hour (Coda Pro+) | Sprint tracking, pipeline views |
Send messages to channels from button columns or automation rules. Compose the message as a formula string — concatenate row data to create dynamic, context-aware notifications. The message is sent as the authenticated Coda user.
Slack.PostMessage( "#support", "New request: " & thisRow.[Title] & " · Priority: " & thisRow.[Priority] )
Send emails from button or automation actions. Reference column values in the recipient, subject, and body fields to create personalized outreach at scale — one Gmail.SendEmail formula drives 50 different emails from 50 different rows.
Gmail.SendEmail( thisRow.[Contact Email], "You're in — welcome to the program", "Hi " & thisRow.[Name] & ",\n\nCongrats on being accepted..." )
Sync all Jira issues — or a filtered subset (one project, one sprint, one label) — into a Coda table. The Jira Pack supports two-way sync: change an issue's status in Coda and it updates in Jira. Teams use this to build sprint dashboards, roadmap views, and engineering health trackers without duplicating data.
Pull Accounts, Contacts, and Opportunities from Salesforce into Coda sync tables. This gives your entire team a real-time pipeline view without everyone needing a Salesforce license — a significant cost saving for larger organizations.
Two-way sync between a Coda table and a Google Sheet. Changes made in Coda push to the Sheet; Sheet changes pull into Coda on next sync. Ideal for teams transitioning from Sheets or sharing data with stakeholders who prefer spreadsheets.
Sync pull requests, issues, and commits into Coda tables. Filter by repo, label, or assignee. Use button columns to open issues directly in GitHub from the Coda row.
Pack actions work inside automation rules exactly the same way they work in button columns. This is where Packs become most powerful — automations run server-side in the background, no human click required, and Pack actions extend what they can do beyond Coda's own data.
When: Row added to Support Requests If: (no condition — fire for every submission) Then: Slack.PostMessage( "#support", "New request: " & [Title] & " · Priority: " & [Priority] )
When: Row changed in Deals (watch: Status column) If: [Status] = "Won" Then: Gmail.SendEmail( [Contact Email], "You're in!", "Dear " & [Name] & ",\n\nWe're thrilled to confirm..." )
Sync tables are powerful but not magic. Understanding their constraints prevents incorrect assumptions about data freshness and schema flexibility.
| Title Sync | Author Sync | Status Sync | Created Sync | Notify Button |
|---|---|---|---|---|
| Add video generation via Runway | james-mwangi | Open | Mar 14 | |
| Fix image validation in download script | priya-mehta | Open | Mar 15 | |
| Compress images before git commit | amara-osei | Merged | Mar 12 |
Slack.PostMessage("#engineering", "PR needs review: " & thisRow.[Title] & " — by " & thisRow.[Author])
| Issue Sync | Summary Sync | Status Two-way | Assignee Sync |
|---|---|---|---|
ENG-412 |
Fix login redirect bug | In Progress | Priya Mehta |
ENG-413 |
Add dark mode to settings page | To Do | James Mwangi |
ENG-411 |
Upgrade Node.js to v20 | Done | Amara Osei |