How to Filter an Airtable Table on Your WordPress Site

TableCrafter gives visitors multiple ways to slice through Airtable data on your WordPress site: a live search bar, per-column dropdown filters, multi-select filters, and date range pickers. This guide covers which filter type applies to each Airtable field type, how to configure them, and the difference between client-side and server-side filtering. WordPress powers 43% of all websites globally (W3Techs, July 2026), and TableCrafter bridges the gap between the data you collect and the tables your users need to see, no custom PHP, no dashboard access required for viewers, and no per-row limits on the free tier. 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/PDF, role-based column visibility, and auto-refresh. Every table embeds on any page with a [tablecrafter] shortcode or the native Gutenberg block. Gravity Forms is active on over 10 million WordPress sites (Gravity Forms, 2025).
What Filter Types Are Available in TableCrafter?
TableCrafter supports four distinct filter mechanisms, each suited to a different kind of Airtable field:
Live search bar across all text columns. Matches as the visitor types.
Single-value dropdown for Select fields. Shows all distinct values as options.
Multi-value dropdown for Multi-select fields. Visitor picks one or more options.
From/To date pickers for Date and DateTime fields.
This applies to all users who can view the table, regardless of role. Role-specific overrides can be set per column under the column Visibility settings. The table-level setting acts as the default for any column without a role override.
The shortcode accepts all column and filter settings defined in the table builder as defaults, but you can override individual parameters inline. For example, `[tablecrafter id="1" per_page="25"]` overrides the default rows-per-page setting for this specific embed without changing the saved table configuration. This lets you reuse one table definition across multiple pages with different display requirements.
Each filter type operates client-side against the full cached Airtable row set. TableCrafter fetches the complete dataset from Airtable once per cache TTL and stores it in a WordPress transient; all filter interactions in the browser run against that cached data with no additional API calls. This means filter responses are instantaneous and consume no Airtable API quota beyond the initial fetch. The cache TTL is controlled by the json_refresh_minutes setting, defaulting to 30 minutes with a range of 5 minutes to 24 hours. For tables where data changes frequently, lowering the TTL keeps the cached dataset fresher. For mostly-static reference tables, a longer TTL reduces API calls significantly while still providing accurate filter results.
How Do I Enable Filters in TableCrafter?
Global Filter Toggle
To show any filters at all, you must enable the filter bar globally for the table:
- Open the table configuration in TableCrafter → Manage Tables.
- In the Display Settings section, enable Filter Bar.
- Save the table.
You can also enable the filter bar at the shortcode level without changing the table configuration:
[tablecrafter id="1" filter="true"]
With filter="true", the filter bar appears and all columns with a configured filter type will show their filter controls.
When filter="true" is set at the shortcode level, TableCrafter injects the filter bar HTML into the page output for that specific embed only. The saved table configuration is not modified, so other shortcode instances of the same table without the parameter render without the filter bar. The filter bar HTML and all its JavaScript are rendered server-side in the initial page response. Because all filter logic runs against the in-memory cached row set, no AJAX call is made when a visitor applies a filter; the JavaScript evaluates the current filter state and hides non-matching rows in the DOM immediately, with no round-trip to the server or to the Airtable API.
Per-Column Filter Configuration
Enabling the global filter bar is not enough on its own, you must also enable filtering on each individual column you want to be filterable:
- In the table configuration, open the Columns section.
- For each column you want to be filterable, enable the Filterable toggle.
- TableCrafter will auto-select the filter type based on the column type, but you can override it.
The filter type auto-assigned to each column follows the Airtable field type: singleSelect columns get a single-value dropdown, multipleSelects columns get a multi-select dropdown, date and dateTime columns get a date range picker, and numeric columns get a min/max range filter. To override the auto-assigned filter type, open the column settings and change the filter type explicitly. Only columns with both the Filterable toggle enabled and a filter type assigned will show a filter control in the bar. Columns where the toggle is on but no filter type is assigned are not filterable in practice. Disabling the Filterable toggle on a column hides that column's filter control entirely while leaving the column visible in the table.
How Do I Filter by Column Type?
Single Select Fields: Dropdown Filter
Airtable Single select fields render a dropdown filter. TableCrafter collects all distinct values from the fetched dataset and populates the dropdown automatically. No manual configuration of options is needed.
When a visitor selects an option from the dropdown, the table immediately filters to show only rows where that column matches the selected value. Selecting the blank/default option resets the filter.
The dropdown is built from the distinct value strings found in the cached row set, not from the Airtable schema's option list. This means options that exist in the Airtable schema but have no matching rows are excluded automatically, keeping the control uncluttered. New options added in Airtable appear in the dropdown after the next cache refresh, since the distinct-value scan re-reads the current transient on each page load. Filtering is an exact match: the row's cell value must equal the selected option string exactly (case-sensitive). When a visitor uses this dropdown alongside other filter controls on the same table, AND logic applies across the controls.
Example use case: A project board where visitors filter by Status: Not started, In progress, or Complete.
Multi-Select Fields: Multi-Select Dropdown Filter
Airtable Multi-select fields render a multi-select dropdown filter. Visitors can pick one or more values. A row is included in the results if it contains any of the selected values (OR logic). This matches the most natural expectation: if you select both Design and Development, you see rows tagged with either or both.
The dropdown is populated from all distinct values found in the dataset, combining all values across all records for that column.
Example use case: A resource library where each resource can have multiple tags, and visitors filter to resources tagged with either Beginner or Advanced.
Date Fields: Date Range Filter
Date and DateTime columns render a From / To date range picker. Both inputs are optional, a visitor can set only a From date to see everything after a certain date, only a To date to see everything before, or both for a specific window.
Dates are compared inclusively: a From date of June 1 and a To date of June 30 includes records on June 1 and June 30.
Airtable stores both date and dateTime values in ISO 8601 format. TableCrafter parses these using the same ISO comparison logic used for chronological sorting, so the date range filter is consistent with the sort order. The createdTime and lastModifiedTime Airtable types, which record when each row was created or last edited, also map to the date column type and activate the same range picker, letting visitors filter by record age. Comparison is done against the ISO-formatted string in the cached row set rather than against a formatted display string, so the display format setting does not affect filter accuracy.
Example use case: An event calendar where visitors filter to events happening in a specific month.
Text, Long Text, URL, Email: Text Search
Text-based columns do not use a dropdown filter by default because the number of unique values could be very large. Instead, they participate in the global search bar. When a visitor types in the search box, TableCrafter filters rows by matching the search term against all enabled text columns simultaneously.
You can also configure an individual text column to have its own text input filter rather than relying solely on the global search bar. Do this in the column's filter settings by setting the filter type to Text Contains. This adds a text input directly below that column header.
Number Fields: Numeric Range Filter
Number columns support a min/max range filter. Visitors can enter a minimum value, a maximum value, or both. Rows outside the range are hidden. This is useful for filtering by price, quantity, score, or any numeric attribute.
The range filter activates on any column whose type is set to Number in the builder. This includes Airtable fields natively typed as number, currency, percent, duration, or rating, all of which the field mapper assigns to the number column type by default. Rollup and count fields that return numeric values do not activate the range filter automatically, because those types default to the text column type in the mapper. To enable range filtering on a numeric rollup or count column, open the column settings in the builder and change the column type from Auto to Number. The range comparison is strictly numeric rather than lexicographic, so a minimum of 10 correctly excludes 9 and includes 10 and 11. Empty cells are excluded from results once either the minimum or maximum bound is set, even if an unfiltered view would show them.
Checkbox Fields: Boolean Filter
Checkbox columns render a three-state filter: All, Yes (checked), or No (unchecked). The default state is All, showing every row regardless of checkbox value.
The underlying behavior of Airtable's checkbox type matters for understanding the filter: a checked box is returned as a JSON true boolean, but an unchecked box is omitted from the record's fields object entirely rather than returned as false. TableCrafter normalizes missing checkbox keys to false when building the cached row set, so the "No" filter option reliably matches both explicitly unchecked boxes and cells that were never set. The checkbox type maps to the toggle column type in the field mapper. In read-only mode, the cell displays a checkmark for true and a neutral indicator for false. In edit mode, clicking the cell toggles the boolean and immediately sends a PATCH request to Airtable. Rapid toggles are queued by the sliding-window rate limiter, which caps Airtable write operations at 5 requests per second.
What Is the Live Search Bar?
The global search bar operates across all text columns simultaneously. It is separate from the per-column filter controls and always does client-side matching.
Enable search independently of filters:
[tablecrafter id="1" search="true"]
Enable both search and filters together, the most common configuration:
[tablecrafter id="1" filter="true" search="true"]
Search matches are case-insensitive and partial. Typing ohn matches rows containing John, johnson, or phone in any searchable text column.
The search implementation is a JavaScript substring scan across the cached row set. Column types that are not text-based, specifically number, date, boolean, and image columns, are excluded from the global search scan; to narrow by a numeric value, use the per-column range filter. The live search combines with any active column filters using AND logic: a row must match the search term AND satisfy all active dropdown or date range filters to remain visible. Clearing the search box restores the table to the state determined by the currently active column filters alone, with no page reload required. The search bar position above the table is fixed and cannot be moved using shortcode parameters.
Changes take effect immediately after saving. No cache flush or page refresh is required for the new configuration to apply to all shortcode instances of this table.
This configuration interacts with any caching or CDN layer active on your WordPress installation. If you use WP Rocket, LiteSpeed Cache, or a CDN such as Cloudflare, flush the page cache after making this change to ensure the updated configuration is reflected in the cached HTML served to visitors. TableCrafter's server-side output is regenerated on the next uncached request.
How Does Client-Side vs. Server-Side Filtering Work?
This distinction matters for performance, especially on large Airtable tables.
Client-Side Filtering (Default)
By default, TableCrafter fetches the entire Airtable dataset on page load (respecting the cache TTL) and performs all filtering in the visitor's browser using JavaScript. No additional API calls are made when a visitor applies or changes a filter.
Advantages: Instant filter response, no API rate limit consumption per filter action, works well for tables up to a few thousand records.
Limitations: The full dataset must be fetched and held in the browser on initial load. For tables with tens of thousands of records, this increases page load time and memory usage.
Server-Side Filtering
For Airtable and Notion sources, TableCrafter does not offer an API filter-passthrough mode that sends visitor-chosen filter values to the Airtable API as query parameters. There is no "Filter Mode: Server" toggle. All column filtering and the global search bar operate against the full cached row set, which is fetched from Airtable once per cache TTL and stored in a WordPress transient under the key gt_airtable_table_{table_id}. Visitor filter interactions consume no Airtable API quota.
The effective approach for reducing the initial data volume on large tables is to use an Airtable view as a server-side pre-filter. Create a dedicated view in Airtable with the filters and field visibility you need for the WordPress table, then set the View field in the TableCrafter data source settings to that view's name. Airtable evaluates the view's filter logic on its own infrastructure before returning records, so TableCrafter receives and caches only the rows that pass the view filter. Visitor filter interactions then operate against this pre-reduced dataset. Airtable enforces a rate limit of 5 requests per second per base for all API operations, which applies to the cache-warming request that fetches the view's records.
How Do Filters Combine in TableCrafter?
When a visitor applies multiple filters simultaneously, TableCrafter combines them with AND logic: a row must satisfy all active filters to appear in the table. For example:
- Status filter: In Progress
- Category multi-select: Design or Development
- Date range: June 2026
Only rows where Status is In Progress, Category contains Design or Development, and the date falls in June 2026 will appear.
The OR-within, AND-across pattern reflects how the filter engine works in the source. Multi-select dropdowns use OR within their own control because a row can legitimately belong to multiple categories, and requiring all selected values to match simultaneously would exclude valid partial matches. Single-select dropdowns and date range filters accept one value or one range at a time, so there is no OR logic within them. The global search bar adds one more AND condition when active: a row must match the typed search term and also pass every active column filter to appear in results. Clearing any single filter control or the search bar recomputes the visible row set immediately without reloading the page or re-fetching data from Airtable.
This setting persists across table rebuilds. If you change the data source later, you may need to revisit this step to remap columns from the new source to the existing table configuration.
After completing this step, verify the result by viewing the page as a logged-out visitor in an incognito window. This confirms the table behaves correctly for public visitors rather than reflecting admin-level permissions that may hide configuration issues during initial setup. Check both the rendered output and the browser console for any JavaScript errors.
How Does Resetting Filters Work?
TableCrafter adds a Reset Filters button to the filter bar automatically when any filter is active. Clicking it clears all filter inputs and the search bar, returning the table to its unfiltered state. You can control the button label in the table's display settings.
The Reset button appears as soon as any filter control is active, whether that is a dropdown selection, a date range entry, a numeric range bound, or a search term. Clicking Reset clears all active filter inputs simultaneously and restores the full cached row set in the browser. This is a client-side operation only; it does not trigger a new API call to Airtable or invalidate the WordPress transient cache. If you want to force a data refresh alongside a filter reset, use the browser's page reload or shorten the cache TTL in the data source settings so the next page load fetches fresh records. The Reset button is rendered as a plain HTML button element and its label can be changed in the table's Display settings to match your site language or terminology.
TableCrafter validates this configuration on save. If validation fails, the admin panel displays a specific error message identifying which field caused the problem. Correct the field value and save again without needing to restart the setup process.
The column mapping you define here is stored as a JSON configuration in the WordPress database. You can export this configuration using the TableCrafter export tool and import it to another table or another site. This is useful when replicating a table layout across multiple pages or when migrating a table to a staging environment for testing before going live.
How Does Full Shortcode with All Options Work?
The shortcode interface is the integration point between the table configuration saved in the WordPress admin and the rendered output visitors see. Parameters passed in the shortcode override the saved defaults for that specific embed only; the saved configuration is not modified. The most common parameter set for a full-featured Airtable table is filter="true" search="true", which activates the filter bar and the global search simultaneously. Adding export="true" places a download button above the table that exports the currently visible filtered rows as CSV, Excel, or PDF depending on which export formats are enabled in the table settings. Adding edit="true" activates inline cell editing, which requires the personal access token to carry the data.records:write scope and limits write-back to non-computed Airtable field types.
[tablecrafter id="1" filter="true" search="true" export="true"]
This renders the Airtable table with the full filter bar, live search, and a CSV export button, the most feature-complete read-only configuration. For editable tables with the same controls:
This step is required before the table can render data. Skipping it or entering incorrect values will result in a connection error when the table first loads. Double-check the value by pasting it directly into the field rather than typing it manually to avoid whitespace or encoding issues.
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.
[tablecrafter id="1" filter="true" search="true" edit="true" export="true"]
Frequently Asked Questions
How Does Filter Types Available in TableCrafter Work?
TableCrafter supports four distinct filter mechanisms, each suited to a different kind of Airtable field:
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 and PDF, 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?
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 and PDF, role-based column visibility, and auto-refresh every N seconds.
Ready to try it?
TableCrafter is free on WordPress.org. Pro unlocks inline editing, role-based permissions, and advanced data sources.
Test this step while logged in as a user with the target role to confirm the expected behavior. Logged-in admin users always see all columns and all rows regardless of role restrictions, which can mask visibility issues during initial configuration.
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.