How to Build a Pricing Table from Google Sheets in WordPress

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 within 60 seconds. 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:
- Prices change frequently (weekly sales, seasonal pricing, dynamic rates)
- A non-technical team member owns pricing and shouldn't need WordPress access
- You have many features or SKUs to compare across tiers
- You want a single source of truth for pricing that also drives emails, PDFs, or internal docs
If you have a static 3-tier SaaS pricing page that changes once a year, a page builder component is simpler. This approach pays off with complexity and frequency of change.
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%
Column Type Decisions
- Keep price values as text (
$29/mo) rather than numbers if you want the formatting to display as-is. Use numbers only if you need price-range filtering. - Use consistent values for boolean features, always
Yes/Noor always✓/✗. Mixing them creates inconsistent badge rendering. - Leave cells blank rather than writing
N/Aif a feature does not apply to a tier, TC renders blank cells cleanly.
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:
- Follow the private sheet connection guide to create a GCP project, enable the Sheets API, and generate a restricted API key.
- Share the pricing sheet with the GCP project account as Viewer.
- 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?
- Go to TableCrafter → Data Sources → Add New.
- Select Google Sheets (Private API).
- Enter your Spreadsheet ID and tab name (e.g.,
Pricing). - Set cache to 60 seconds so price changes appear within a minute.
- Save and fetch a preview to confirm the columns appear correctly.
Step 4: How Do I Map Columns for Comparison Display?
In the column mapping UI:
- Feature, Type: Text, make this the first column, mark it as Sticky/Pinned if TC supports column pinning so it stays visible while users scroll right on mobile.
- Starter, Pro, Enterprise, Type: Text. Enable Badge mode for Yes/No columns to render checkmarks and crosses as colored badges.
Yes/No Badge Configuration
In TC's column editor for each plan column, 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.
Yes→ green background, white text (or use a checkmark icon if TC's icon badge mode is enabled)No→ light gray background, gray text- (blank) → no badge
Step 5: How Do I Create the Table with Comparison Layout?
- Go to TableCrafter → Tables → Add New.
- Select the pricing data source.
- Under Layout, choose Comparison Table if available, or standard table layout.
- 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.
- Disable Pagination, show all rows at once for a pricing table. Paginating features across multiple pages defeats the purpose of a comparison.
- Disable Search and Export, these are not useful on a pricing table and add visual noise.
- 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 interval is usually a caching issue at one of three layers: the Google Sheets API cache (configured in Step 3), NitroPack or another full-page cache plugin, or your browser cache.
- Open the pricing page on your site while logged in as an administrator (or use a private/incognito window to simulate a visitor).
- In Google Sheets, change
$79to$89in the Pro column of the Monthly Price row and save the sheet. - Wait 60 seconds (the cache TTL you set in Step 3). If you set a longer TTL, wait that duration instead.
- Reload the pricing page. The new price appears with no WordPress action taken — no plugin update, no cache flush, no republish required.
If the price does not update after two full TTL cycles, check the following: (1) confirm the cache TTL in the data source settings matches what you expect; (2) flush your WordPress caching plugin's page cache for the pricing URL; (3) confirm the Google Sheet tab name in the data source settings exactly matches the sheet tab you edited, including case and spacing.
How Does Highlighting a Recommended Plan Work?
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.
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.
[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.