How to Turn Gravity Forms Into a Simple CRM with TableCrafter

Updated July 2026 • 9 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

You do not need Salesforce for a small-to-medium business contact management workflow. If you already have Gravity Forms collecting leads, contacts, or inquiries, TableCrafter turns that data into an interactive CRM table: inline status editing, notes, user assignment, filtering, and export, all on a private WordPress page. This guide builds the entire system end to end. 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. Conditional logic fields in Gravity Forms are used by 73% of complex form builders (Gravity Forms user survey, 2024).

What You Will Build?

By the end of this guide you will have:

This is a fully functional lightweight CRM. It does not replace a dedicated CRM for complex pipeline management, but for many small businesses it is more than enough, and it lives inside WordPress with data you already own.

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 1: How Do I Design the Gravity Form?

Create a new Gravity Form named "Lead Intake" with these fields:

The Status and Assigned To fields are the most important to configure correctly because they power the filtering and inline editing features. Using Drop Down fields (rather than Text fields) ensures TableCrafter can render them as interactive dropdowns in both the filter row and the inline edit input.

Assigned To with real users: If you want the Assigned To field to list actual WordPress user accounts (so filtering by assigned-to also filters by user ID), use a GF User field (available in GF 2.5+) instead of a static Drop Down. TableCrafter's user lookup column then resolves the stored user ID to a display name automatically.

Publish the form. You do not necessarily need to embed it publicly, you can submit test entries directly from Forms > Entries > Import or create a private admin-only page for lead intake submission.

Step 2: How Do I Create the CRM Table Configuration?

Go to TableCrafter > Tables > Create New Table. Name it "Lead CRM". Select Gravity Forms as the data source and choose your "Lead Intake" form.

Drag these columns into the column zone in this order:

  1. Date Submitted (virtual column), label it "Date Added"
  2. Name (parent card, renders full name)
  3. Email
  4. Phone
  5. Company
  6. Lead Source
  7. Status
  8. Assigned To
  9. Notes

Set Default Sort to Date Submitted, Descending. Set Rows Per Page to 30.

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.

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.

Step 3: How Do I Configure Inline Editing?

Scroll to Edit Mode and enable Inline Editing. Pro

Go back to the column builder and configure edit settings per column:

Status Column

Click the Status column card, open the Edit tab, and toggle Editable on. The input type auto-selects Dropdown because the underlying GF field is a Drop Down. The dropdown choices are pulled from the GF field configuration: New, Contacted, Qualified, Proposal Sent, Won, Lost. No additional configuration needed.

Assigned To Column

Enable editable. If using a GF User field, the input type is User Dropdown, it renders a dropdown of WordPress users. If using a static Drop Down, it renders a standard dropdown of the configured choices. Either way, clicking the cell opens a dropdown and saving immediately updates the entry.

Notes Column

Enable editable. Set the input type to Textarea. Set Max Length to 1000 characters for the display (truncate with expand) and leave no limit on the edit input. The Notes field is where your sales team logs call outcomes, email summaries, and follow-up actions.

All Other Columns

Leave Name, Email, Phone, Company, Lead Source, and Date Submitted as read-only. These are original submission data, you do not want them accidentally edited in the table. If a contact's email needs updating, that is best handled by opening the GF entry directly in wp-admin where there is an audit trail.

Step 4: How Do I Set Role-Based Edit Permissions?

Under Edit Mode > Edit Permissions, configure the following:

Under Access & Visibility > Minimum Role to View, set to Editor or your custom Sales role. This CRM table should never be publicly visible.

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 5: How Do I Add Status and Assigned To Filters?

In the column builder, configure filters:

Status Filter

Open the Status column card's Filter tab. Set Filter Type to Dropdown. Set Default to New so the CRM table loads showing only new, unworked leads. Sales team members clear the filter or change it to "Contacted" or "Qualified" to see different pipeline stages.

Assigned To Filter

Open the Assigned To column card's Filter tab. Set Filter Type to Dropdown. Set Default to All. Team members can change this to their own name to see only their assigned leads, a personal work queue without needing a separate table.

Date Range Filter (Optional)

Open the Date Submitted column's Filter tab. Set Filter Type to Date Range. Set Default to Last 30 Days. This prevents the table from loading thousands of old closed leads on every page visit.

Step 6: How Do I Enable Export?

Under Table Options > Export, enable the export button. Pro Set format to XLSX for weekly sales reporting. Set scope to Filtered rows only. Set filename template to crm-export-{date}.

Your shortcode at this point:

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 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.

[tablecrafter id="3" search="true" filter="true" edit="true" export="true"]

Step 7: How Do I Create the CRM Page?

Create a new WordPress page titled "Sales CRM". Set page visibility to Private (only logged-in users see it) and further restrict via your access control plugin to Editor/Sales role and above. Paste the shortcode. Publish.

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.

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.

What Is the Daily Sales Team Workflow?

Here is what a typical daily workflow looks like with this CRM:

  1. Sales team member opens the CRM page. They see new leads from the last 30 days in New status.
  2. They click the Assigned To cell on a lead and assign it to themselves.
  3. They make a call. They click the Notes cell and type "Called 2026-06-24, left voicemail. Follow up Thu."
  4. They click the Status cell and change it to "Contacted."
  5. At week end, the sales manager filters to Won status for the month and clicks Export to download the Won leads for commission calculation.

No wp-admin access required for steps 1 through 5. No custom CRM plugin purchased. No data leaves your WordPress database.

If this step produces unexpected output, check the source data directly in the connected system. TableCrafter passes data through without modification — if a cell displays an unexpected value, the source record contains that value. Use the TableCrafter debug log (Settings > Advanced > Debug Mode) to trace the exact query sent to the source and the raw response received, which narrows the diagnosis to either a source-side or rendering-side issue.

How Does Extending the CRM Work?

Once this baseline is working, common extensions include:

What Are the Next Steps?

You now have a working CRM that lives entirely in WordPress, uses data you already own in Gravity Forms, and gives your sales team the ability to manage their pipeline without a wp-admin login or a third-party SaaS subscription. The next productive step is setting up the status-change email alert so assigned team members get notified the moment a lead is assigned to them.

If the result does not match expectations after saving, use the TableCrafter debug log (enable via TableCrafter Settings > Advanced > Debug Mode) to trace exactly which configuration value is being applied for the current request.

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.

Frequently Asked Questions

How Do I Design the Gravity Form?

Create a new Gravity Form named "Lead Intake" with these fields:

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.

The setting is stored in the WordPress options table under the table's configuration key. It does not modify the original data source and can be changed at any time without affecting the underlying records.

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.