How to Build a Searchable Gravity Forms Submission Log

Updated July 2026 • 7 min read • By Fahad Murtaza

TableCrafter live search, sorting, filtering, and pagination out of the box
TableCrafter live search, sorting, filtering, and pagination out of the box

The Gravity Forms built-in entry list is adequate for individual entry review but falls apart the moment you need to search across multiple fields simultaneously, filter by date range, or share a clean view with a non-admin team member. TableCrafter turns your GF entries into a fully searchable, filterable submission log in a few configuration steps. This guide builds a complete admin tool for a support team from scratch. 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. Google Sheets is used by over 1 billion people globally (Google, 2023).

What Is the Use Case: Internal Support Queue?

The target scenario: a support team uses Gravity Forms to capture inbound requests. Each submission has a requester name, email, subject, description, date, and a status field (Open, In Progress, Resolved, Closed). The team needs a page where they can:

None of this requires custom PHP. It is all TableCrafter configuration.

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.

Step 1: How Do I Design Your Gravity Form Correctly?

If you are building the form fresh, make the status field a Drop Down or Radio Buttons field with defined choices: Open, In Progress, Resolved, Closed. Using a constrained choice field (rather than a Text field) is what enables TableCrafter's dropdown filter on that column. A free-text status field can only support a text search filter, which is less useful for categorical data.

The date of submission does not need a field, Gravity Forms records a date_created timestamp automatically on every entry, and TableCrafter exposes this as a virtual column called Date Submitted.

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.

Step 2: How Do I Create the Table Configuration?

Go to TableCrafter > Tables > Create New Table. Select Gravity Forms as the data source and choose your support request form. Drag the following columns into the column zone, in order:

  1. Date Submitted (virtual column, always available)
  2. Name (the Name field, parent card for full name)
  3. Email
  4. Subject
  5. Status (your Drop Down field)
  6. Description (truncated to 80 chars with expand)

Set the Default Sort to Date Submitted, Descending so the newest entries always appear at the top. Leave the row limit at 25 for a dense but manageable view.

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.

Scroll to Table Options > Search and toggle Enable Search Bar on. The search bar performs a full-text scan across all visible columns simultaneously. When a user types "invoice" into the search box, TableCrafter returns every row where any column value contains that string, subject, description, name, or email.

Two sub-options appear once you enable the search bar:

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.

Search scope: The live search only scans columns that are included in the table configuration. If you did not drag the Description column into the column zone, searches will not match text inside descriptions even though that data exists in the database.

Step 4: How Do I Add Column-Level Filters?

Column filters appear as small filter icons in the column header row. Click any column card in the builder and open the Filter tab.

Date Submitted, Date Range Filter

In the Date Submitted column card, set Filter Type to Date Range. This renders two date-picker inputs above the table labeled "From" and "To". When a user sets a date range, the table returns only entries created within that window.

Default date range: Set a default range in the column filter settings to pre-filter to the current month when the page loads. Under Filter Default, select Current Month from the preset dropdown. The team does not need to set a range manually on their first daily visit.

Status, Dropdown Filter

In the Status column card, set Filter Type to Dropdown. Because your Status field is a GF Drop Down with defined choices, TableCrafter automatically populates the filter dropdown with the same choices: Open, In Progress, Resolved, Closed, plus an "All" option at the top. No manual configuration needed.

Set the Filter Default to Open so the table loads showing only open tickets. Team members click "All" or another status to change the view.

Email, Text Search Filter

In the Email column card, set Filter Type to Text. This adds a small text input in the Email column header. Typing a partial email address filters the table to matching rows. Useful when a customer contacts support and wants to look up all their own tickets by email.

Step 5: How Do I Enable the Export Button?

Scroll to Table Options > Export and toggle Enable Export Button on. Pro

Under Export Settings:

The export button appears in the top-right corner of the rendered table, above the search bar. It respects the current active filters and search terms at the moment the button is clicked.

Step 6: How Do I Configure Access Permissions?

This is an internal admin tool, not a public-facing page. Under Access & Visibility > Minimum Role to View, set the minimum role to Editor or a custom role specific to your support team. Users below that role see an access-denied message or an empty table, depending on your preference.

Do not use page-level password protection as the sole gate, TableCrafter's role check is a server-side query constraint, making it a more reliable access control mechanism for the data itself.

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 7: How Do I Place the Shortcode and Test?

Save the table configuration. Your shortcode will look like this:

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

Create a new page titled "Support Ticket Log" (or similar), set visibility to Private or restrict via your access control plugin, and paste the shortcode. Publish the page and test with a user account at your minimum required role.

Submit a few test entries through the Gravity Form, then reload the table page. Confirm the search bar returns correct results, the date range filter excludes entries outside the range, the status dropdown filter works, and the export downloads only the visible filtered rows.

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.

How Does Performance Tip for Large Entry Sets Work?

If your form has accumulated tens of thousands of entries, enable Server-Side Processing in Table Options > Performance. With server-side processing on, TableCrafter fetches only the current page of results per request rather than loading all matching entries into memory. Search and filter operations send AJAX requests rather than filtering a client-side dataset. The user experience is identical, but memory usage and initial page load time improve significantly for large datasets.

What Are the Next Steps?

Your submission log is now a functional internal tool. Natural extensions from here include enabling inline editing so support agents can update the Status column directly from the table without opening individual entries in wp-admin, setting up email alerts when a status changes to "Escalated", or cloning the table configuration with a different default status filter to create a separate "Resolved Tickets" archive view.

Frequently Asked Questions

What Is the Use Case: Internal Support Queue?

The target scenario: a support team uses Gravity Forms to capture inbound requests. Each submission has a requester name, email, subject, description, date, and a status field (Open, In Progress, Resolved, Closed). The team needs a page where they can:

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.