How to Display a Notion Database as a Live WordPress Table

Updated July 2026 • 6 min read • By Fahad Murtaza

TableCrafter table builder, connect Gravity Forms, Google Sheets, Airtable, CSV, or JSON data sources
TableCrafter table builder, connect Gravity Forms, Google Sheets, Airtable, CSV, or JSON data sources

Notion is where many teams keep their CRM, product roadmap, inventory, or content calendar, but Notion's own public-sharing options are limited. TableCrafter fetches records from a Notion database on a configurable interval and renders them as a clean, read-only, filterable, sortable table on your WordPress site. Sync runs via WP-Cron and caches results in WordPress transients: it is not real-time, but the interval is configurable in minutes. This guide covers the configuration, the canonical use cases, refresh behavior, and the shortcode to use. Notion as a data source is a Pro-only feature in TableCrafter. The free version on WordPress.org supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV, Excel (.xlsx), and JSON, role-based column visibility, and auto-refresh. Every table embeds on any page with a [tablecrafter] shortcode or the native Gutenberg block.

Why Read-Only Display Is the Common Case?

Most teams want their Notion data visible on their website without letting site visitors change it. Read-only display is the right choice when:

Read-only mode also means your Notion integration only needs the Read content capability, no write access, which keeps the security surface area small.

TableCrafter re-fetches this data on each page load by default. If your data source updates infrequently and your site has significant traffic, enable the built-in caching option in the table's Performance tab. This stores the fetched data for a configurable number of minutes and serves it from WordPress transients, reducing API calls to the source and improving page load time for visitors.

Step 1: How Do I Connect the Notion Database?

If you have not connected Notion yet, follow the full setup once: create an internal integration, share the target database with it, grab the database ID, and enter both in the TableCrafter builder. The complete walkthrough is in How to Connect a Notion Database to TableCrafter.

For read-only display, give your Notion integration only the Read content capability. You do not need Update content.

💡

A read-only integration is a security best practice for public-facing tables. Even if the token leaked, it could not modify your Notion data.

The configuration you set here applies to every visitor who loads a page containing this table, regardless of whether they are logged in. Role-specific overrides for columns and rows are a separate layer and do not replace these global display settings. Apply global settings first, then add role restrictions as needed for tables that serve multiple user types.

Step 2: How Do I Configure Columns for Display?

When the connection succeeds, TableCrafter reads every property from your Notion database and pre-builds a column for each. Tidy them for a public table:

  1. Toggle off internal properties visitors should not see (private notes, owner-only fields, scratch columns).
  2. Set readable column labels. Use plain language, not raw Notion property names.
  3. Keep Select and Status properties as badge columns so statuses read at a glance.
  4. Keep Date columns as dates so they sort chronologically and respect your configured date format.
  5. Set column widths and the default sort column.

For exactly how each Notion property type is flattened and rendered, see How to Map Notion Properties to TableCrafter Columns.

Leave the Edit toggle off. For a read-only table you do not need it, and an integration scoped to Read content cannot write back to Notion anyway.

Step 3: How Do I Enable Filtering, Search, and Sorting?

Read-only does not mean static. Visitors can still narrow down to the records they need:

These interactions are client-side: they operate on the already-fetched dataset without extra Notion API calls, so filtering and sorting stay fast even on larger databases.

This step completes the connection between your data source and the TableCrafter table engine. Once saved, the plugin caches the connection credentials in the WordPress options table and uses them on every subsequent page load. If you update the source configuration later — for example, rotating an API key or changing a sheet URL — return to this step, enter the new value, and save again. The table updates immediately on next load without any shortcode changes.

Step 4: How Do I Place the Shortcode?

Go to any WordPress page or post where you want the Notion table to appear. In the Gutenberg editor, add a Shortcode block (search for "Shortcode" in the block inserter) or a Custom HTML block, then paste the shortcode. The id value is the number TableCrafter assigned when you saved the table — you can find it in the TableCrafter admin table list.

Choose the shortcode variant that matches your use case:

After publishing or updating the page, view it in a private or incognito window while logged out to confirm the Notion data appears for public visitors. If the table appears empty, check that the Notion integration still has access to the database and that the cache TTL (configured in Step 3) has not expired stale data from a previous connection test. You can force a cache refresh by going to the table in the TableCrafter admin and clicking Clear Cache.

What Are the Canonical Use Cases?

Public Product Roadmap

Surface your Notion roadmap so customers and prospects can see what is shipped, in progress, and planned, without needing a Notion account or any login. The public roadmap pattern works well when your team manages the roadmap entirely in Notion and your website provides the outward-facing view.

A recommended column set: Feature name (Title property), Status (Status property rendered as a colored badge via the gt-badge CSS class applied by TC_Badge_Service), Target Quarter (Select property, filterable by dropdown), and Description (Rich text, truncated to a readable length). Enable column filtering on Status so visitors can narrow the view to "In Progress" or "Planned" items. Enable search so product-savvy visitors can find specific feature requests by keyword.

Because TableCrafter caches Notion data in WordPress transients and refreshes on a configurable interval via WP-Cron, the roadmap is not updated in real time. There is a delay between a Notion edit and when it appears on the website, measured in minutes based on your configured cache interval. Set the interval based on how often your roadmap data changes and how fresh the website view needs to be.

[tablecrafter id="2" filter="true" search="true"]

Team or Member Directory

Display a Notion people database as a publicly browsable directory. This is a common use case for agencies listing team members, associations publishing member directories, or organizations providing a vendor or partner list. The Notion database is the source of truth managed by your team; the WordPress table gives external visitors a clean browsable view without direct Notion access.

A recommended column set: Name (Title property), Role or Position (Select property, filterable), Team or Department (Select property, filterable), and Email (Email property, rendered as a clickable mailto: link). Search by name so visitors can find a specific person quickly. Filter by Team to scope the directory to a particular department or group. Notion People properties resolve to member display names automatically without any additional configuration in TableCrafter.

For privacy, toggle off columns that contain internal information such as personal phone numbers, hire dates, or reporting-line fields. The column visibility toggle in the table builder controls which Notion properties appear in the website output without modifying the Notion database. This is a Pro-only feature: ensure your TableCrafter Pro license is active and the Notion API token and database ID are configured in the DB Connections admin section before embedding.

Inventory or Asset Register

Show a Notion inventory or asset database as a filterable table for your team, customers, or the public. This pattern works for physical product catalogs, IT asset registers, equipment lists, and similar structured datasets where Notion is the operational record of truth and the WordPress site provides a read-only view.

A recommended column set: Item name (Title), Category (Select, filterable by dropdown), Quantity (Number, sortable), Status (Status property rendered as a badge, filterable), and Location (Rich text). Filter by Category and Status to help visitors scope the view to the items they need. Number columns sort numerically rather than alphabetically, so quantity and stock-count columns rank in the correct order.

For inventory that changes frequently, configure a shorter cache interval so the website table reflects updates from Notion within minutes of a change. TableCrafter uses WP-Cron and WP transients to manage the cache: the interval you set determines the maximum delay between a Notion update and the refreshed website view. Write-back from the WordPress table to Notion requires Pro; for a read-only inventory display, your Notion integration needs only the Read content capability.

Content Calendar

Publish your editorial calendar so contributors, clients, and stakeholders can see what content is scheduled, who owns it, and what stage it is in, without needing a Notion account. This removes the friction of sharing Notion access with external collaborators who only need visibility, not editing rights.

A recommended column set: Title (Title property), Author (People property, resolves to member name automatically), Publish Date (Date property, sortable chronologically), Content Type (Select property, filterable), and Stage (Status property rendered as a badge, filterable). Filter by Content Type to show only blog posts, videos, or social content. Filter by Stage to surface items in Draft or Review that need attention.

Because Notion sync in TableCrafter runs on WP-Cron with a configurable interval, the calendar on the website is not updated in real time. New entries or status changes made in Notion appear on the website after the next cache refresh cycle. For a calendar that changes daily, configure a short cache interval; for a quarterly content plan, a longer interval keeps API calls low. The Notion integration only needs Read content capability for a display-only calendar: no Update content access is required.

Lightweight CRM View

Expose a curated, filtered slice of your Notion CRM as a read-only directory for partners, clients, or your internal sales team. Common examples include a partner or vendor directory, a customer success account list, or a reseller locator where each row represents a company rather than an individual contact.

A recommended column set: Company name (Title), Tier or Category (Select, filterable), Owner or Account Manager (People property, resolves to team member name automatically), and Last Contact date (Date, sortable). Filter by Tier to help users find partners at a specific level. Sort by Last Contact to identify accounts that have not been contacted recently.

Toggle off any columns that contain private commercial information such as deal values, contract terms, probability scores, or internal notes. The column visibility toggle in the table builder controls which Notion properties appear in the website output without modifying the underlying Notion database. Because this is a read-only display, the Notion integration requires only Read content capability; no Update content access is needed. Confirm your TableCrafter Pro license is active and that both the Notion API token and the database ID are entered in the DB Connections admin section before embedding the table.

How Does Refresh and Caching Work?

TableCrafter does not call the Notion API on every page view. When a table is requested, it serves cached rows if a recent copy exists, and re-fetches from Notion only when the cache has expired. This keeps pages fast and stays well within Notion's API rate limits.

Scheduled, background refresh (so the cache is warmed on a timer rather than by the first visitor) is on the roadmap. Until then, the lazy TTL above governs how fresh the table is.

How Does Mobile Behavior Work?

TableCrafter tables are responsive by default. On narrow screens the table becomes horizontally scrollable rather than wrapping or truncating — the column headers stay fixed while the data rows scroll left-right. Badge columns (Select, Status, Multi-select) stay legible at small sizes because badge text is rendered at a fixed minimum width. The search bar and filter controls stack above the table in a single column on screens narrower than 600px, so visitors on phones can still filter before scrolling the table horizontally. No separate mobile configuration is required — the same shortcode renders correctly on phones, tablets, and desktops.

For tables with many columns (6 or more), consider enabling the column picker (available via the column visibility toggle in the table toolbar) so mobile visitors can hide columns they do not need and reduce horizontal scrolling. You can also configure a default column set for narrow screens via the Responsive Settings in the table builder: specify which columns are visible by default at mobile breakpoints without removing them entirely from the table configuration.

What Are the Next Steps?

With a Notion database connected and rendering as a WordPress table, you have the foundation for a range of public-facing and internal data displays. The guides below cover the most common follow-on tasks after completing this read-only setup:

If you need to write data back from WordPress into Notion, that feature requires TableCrafter Pro and uses the TC_Notion_Push_Engine class. Write-back is a separate configuration from read-only display and involves a different set of integration permissions. Start with the read-only setup described in this guide, then layer on write-back once the display is working correctly.

Frequently Asked Questions

How Does Why Read-Only Display Is the Common Case Work?

Most teams want their Notion data visible on their website without letting site visitors change it. Read-only display is the right choice when:

What Is TableCrafter?

TableCrafter is a WordPress plugin that turns data from Gravity Forms, Google Sheets, Airtable, Notion, REST APIs, CSV files, and WooCommerce into interactive, sortable, filterable frontend tables. Embed any table on any WordPress page with the [tablecrafter] shortcode or the native Gutenberg block. No PHP or custom development required. The free version supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV, Excel (.xlsx), and JSON (PDF is browser print only, not a server export), role-based column visibility, and auto-refresh.

Does this require PHP or developer skills?

No. TableCrafter is configured entirely through the WordPress admin interface. You choose your data source, map fields to columns, and set display preferences using point-and-click controls. Embedding uses the [tablecrafter] shortcode or the native Gutenberg block.

Is the free version sufficient or do I need Pro?

Notion is a Pro-only data source in TableCrafter. The free plugin on WordPress.org supports CSV, JSON, Google Sheets, and Excel sources with unlimited tables, rows, and columns. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST API sources, inline cell editing, bulk row actions, export to CSV, Excel (.xlsx), and JSON (PDF uses the browser print dialog, not a server export), role-based column visibility, and auto-refresh.

Ready to try it?

TableCrafter is free on WordPress.org. Pro unlocks inline editing, role-based permissions, and advanced data sources including Notion.