How to Build a Pricing Table from Google Sheets in WordPress

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

Managing a pricing table in a WordPress page builder is tedious, every price change means logging into WordPress, finding the right element, editing, and republishing. With Google Sheets as the data source and TableCrafter rendering the table, your team updates a spreadsheet and the live site reflects the change at the next WP-Cron sync cycle. No WordPress access required. 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. Notion databases support up to 10,000 rows per database on free plans (Notion documentation, 2025).

When This Approach Makes Sense?

The Sheets-driven pricing table works best when:

If you have a static 3-tier SaaS pricing page that changes once a year, a page builder component is simpler to configure and requires no data source setup. The Sheets approach adds value in proportion to how often pricing changes and how many people need to make those changes without touching WordPress. A marketing team that updates prices weekly across regional variants benefits significantly from this setup. The approach also works well when pricing data feeds other systems: a single Google Sheet can serve as the canonical pricing record that simultaneously drives your WordPress pricing table, a Google Docs proposal template, and an internal quoting spreadsheet, with all three updating when the sheet changes.

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 1: How Do I Structure the Google Sheet for a Comparison Table?

The most versatile layout for a pricing comparison table uses features as rows and plans as columns:

Feature          | Starter | Pro    | Enterprise
Monthly Price    | $29     | $79    | $249
Users            | 3       | 25     | Unlimited
Storage          | 10 GB   | 100 GB | 1 TB
API Access       | No      | Yes    | Yes
Priority Support | No      | No     | Yes
Custom Domain    | No      | Yes    | Yes
SLA              |         | 99.9%  | 99.99%
Rows-as-features vs. rows-as-plans: You can also structure it with plans as rows and features as columns, which makes filtering by plan possible. Rows-as-features works better when you want to highlight specific capabilities. Choose based on what your visitors scan for first.

Column Type Decisions

Setting the correct column type determines which TC display features are available. Make these decisions before mapping columns in Step 4:

Step 2: How Do I Publish or Connect the Sheet?

Pricing data is almost always sensitive enough to keep off public CSV. Use the API key method:

  1. Follow the private sheet connection guide to create a GCP project, enable the Sheets API, and generate a restricted API key.
  2. Share the pricing sheet with the GCP project account as Viewer.
  3. Enter the API key and Spreadsheet ID in TableCrafter → Settings → Integrations.

If your pricing is already public knowledge (you publish it on the page), the public CSV method from the public sheet guide is simpler.

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.

Step 3: How Do I Configure the Data Source?

  1. Go to TableCrafter → Data Sources → Add New. Select Google Sheets as the source type before the configuration form appears.
  2. Select Google Sheets (Private API). This uses the Google Sheets API v4 with an API key, so the sheet does not need to be publicly published.
  3. Enter your Spreadsheet ID and tab name (e.g., Pricing). The Spreadsheet ID is the alphanumeric string in the sheet URL between /d/ and /edit. The tab name must match the sheet tab exactly, including capitalization and spaces.
  4. Set Sync Interval to 15 min if you need price changes reflected quickly, or hourly if pricing updates are infrequent. TableCrafter registers a WP-Cron event that fetches fresh data from Google on the selected schedule and stores the result in a WordPress transient.
  5. Save and fetch a preview to confirm the columns appear correctly. If the preview is empty, verify that your API key has the Google Sheets API enabled in Google Cloud Console and that the Spreadsheet ID matches the sheet you shared in Step 2.

Step 4: How Do I Map Columns for Comparison Display?

In the column mapping UI:

Yes/No Badge Configuration

Badge rules are configured per column and stored under column_badge_maps in the table settings. Each rule maps a specific text value to a background color and text color. Rules are matched exactly against the cell text, so "yes" (lowercase) will not match a rule defined for "Yes." In TC's column editor for each plan column where you want visual Yes/No indicators, enable Badge mode and set badge rules:

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.

Step 5: How Do I Create the Table with Comparison Layout?

  1. Go to TableCrafter → Tables → Add New.
  2. Select the pricing data source.
  3. Under Layout, choose Comparison Table if available, or standard table layout.
  4. Disable Sorting, pricing features have a specific order you want to preserve from the sheet. Allowing visitors to re-sort a pricing table by column creates confusion.
  5. Disable Pagination, show all rows at once for a pricing table. Paginating features across multiple pages defeats the purpose of a comparison.
  6. Disable Search and Export, these are not useful on a pricing table and add visual noise.
  7. Save and note the table ID (e.g., 6).

Step 6: How Do I Embed the Pricing Table?

[tablecrafter id="6"]

Because sorting, search, and export are all disabled at the table configuration level, you don't need those attributes in the shortcode. The shortcode stays minimal.

Place this shortcode in a wide content area, pricing tables need horizontal space. In Elementor or Gutenberg, use a full-width section or a container without a content width constraint.

Step 7: How Do I Test a Live Price Change?

This step confirms that the live-data flow works end-to-end before you consider the setup complete. A price that does not update on the expected schedule is usually a caching issue at one of three layers: the WP-Cron sync schedule configured in Step 3, a full-page cache plugin such as NitroPack or WP Rocket, or your browser cache.

  1. Open the pricing page in a private or incognito browser window to simulate a visitor session without admin cookie interference.
  2. In Google Sheets, change $79 to $89 in the Pro column of the Monthly Price row and save the sheet.
  3. Wait for the next WP-Cron sync cycle at the interval you set in Step 3. You can check the Last Synced timestamp under TableCrafter → Data Sources to confirm when TC last fetched from Google.
  4. Reload the pricing page. The new price appears with no WordPress action required: no plugin update, no cache flush, no republish.

If the price does not update after two full sync intervals, investigate three areas: first, confirm the sync interval in the data source settings matches your expectation; second, flush your WordPress caching plugin's page cache for the pricing URL, since a stale HTML cache prevents visitors from seeing updated data even when TC's transient is fresh; third, confirm the Google Sheet tab name in the data source settings exactly matches the sheet tab you edited, including capitalization and spaces.

Add a row at the top of your sheet with a Highlight value for the recommended plan:

Feature   | Starter | Pro          | Enterprise
Highlight |         | Most Popular |

Map the Highlight row to TC's Column header badge feature, which adds a label above the column header. This creates the common "Most Popular" callout above the Pro column without any CSS customization.

The Highlight row value can be any text you want to display as the callout label. Common choices are "Most Popular," "Best Value," or "Recommended." Leave the Starter and Enterprise cells blank to suppress the badge on those columns. TableCrafter reads the Highlight row value during rendering and injects the text as a styled label above the column header cell. This is purely a display feature and does not affect sorting, filtering, or any other table behavior.

If you want additional styling on the highlighted column such as a distinct background color, you can apply it through the TC column editor's custom CSS class field. Add a class to the Pro column and target it in your theme's stylesheet or via the Additional CSS panel in the WordPress Customizer. The badge label and the column background styling are separate concerns and can be applied independently.

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.

Connecting pricing to a booking form: If visitors submit a Gravity Forms quote request after viewing pricing, you can display form submissions in a separate TC table on the admin side using the same plugin, [tablecrafter id="7" edit="true"] for an editable admin view of quote requests.

Frequently Asked Questions

How Do I Structure the Google Sheet for a Comparison Table?

The most versatile layout for a pricing comparison table uses features as rows and plans as columns:

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.