How to Build a Live Leaderboard 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

A live leaderboard is one of the best showcases for the Google Sheets + TableCrafter combination: the organizer updates scores in Sheets, and the embedded WordPress table refreshes automatically every 60 seconds without anyone touching the site. This guide builds a complete leaderboard with rank column, score data bars, and top-3 status badges. 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. In a 2024 study of business WordPress sites, 68% of teams needed non-admin users to update form data at least weekly (WP Engine Survey, 2024).

What Is the Architecture?

Your Google Sheet is the single source of truth. Organizers update it however they want, manually, via a form, or via a script. TableCrafter polls the sheet on a 60-second cache interval and re-renders the table for the next visitor after a change. The visitor sees near-real-time data without any page refresh mechanism needed on the frontend.

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.

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 Structure the Google Sheet?

Create a sheet with these columns in row 1:

Rank | Name | Team | Score | Status

Column notes:

Let Sheets do the ranking math. Using RANK() in Sheets means ties are handled correctly (two players with the same score both get rank 2, and rank 3 is skipped). TC displays whatever Sheets computes.

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

For a public leaderboard where scores are meant to be seen:

For a private competition where only site visitors with the URL can see results, but you don't want the raw sheet exposed:

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.

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 3: How Do I Create the Data Source in TableCrafter?

  1. Go to TableCrafter → Data Sources → Add New.
  2. Choose your connection type (Public CSV or Private API).
  3. Enter the URL or Sheet ID.
  4. Set Cache duration to 60 seconds. This is the refresh interval, every 60 seconds, TC will fetch fresh data from Google when the next page request comes in.
  5. Click Save and Fetch Preview to confirm columns are detected.

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

In the column mapping interface:

Configuring the Score Data Bar

In TC's column editor for Score, enable Data Bar and set:

Configuring Status Badges

In TC's column editor for Status, enable Badge mode and map values to colors:

Step 5: How Do I Create and Configure the Table?

  1. Go to TableCrafter → Tables → Add New.
  2. Assign the leaderboard data source.
  3. Set Default sort column to Score, direction Descending.
  4. Set Rows per page to show all participants (or paginate for large competitions).
  5. Enable Search so visitors can find specific players by name.
  6. Enable Team filter if you mapped Team as filterable.
  7. Disable Export if you don't want participants downloading the full score list.
  8. Save the table. Note the assigned ID (e.g., 5).

Step 6: How Do I Embed on Your WordPress Page?

Edit the page where you want the leaderboard. In the Gutenberg editor, add a Shortcode block and paste the shortcode from Step 5. For a leaderboard with search and column filters:

[tablecrafter id="5" filter="true" search="true"]

For a fully automated leaderboard that shows the current top entries without any visitor controls, use the minimal form:

[tablecrafter id="5"]

Publish or update the page. The leaderboard is live and will reflect the current rankings from your Google Sheet on every page load (subject to the cache TTL you configured in Step 2). To verify the display is correct, view the page while logged out — the table should show the same data a visitor would see, with rankings sorted by your configured default sort column. If you configured auto-refresh in Step 4, wait one refresh cycle (the interval you set) and confirm the table updates in place without a page reload.

How Does Testing the Live Refresh Work?

  1. Open the page in one browser tab.
  2. In another tab, open the Google Sheet and change a score value.
  3. Wait 60 seconds, then reload the WordPress page.
  4. The updated score and recalculated rank should appear.

If the update does not appear after 70 seconds, check whether a caching plugin (WP Rocket, W3TC, NitroPack) is serving a cached page. Exclude the leaderboard page URL from full-page caching, or append a query string to bust the cache during testing: ?nocache=1.

Page-level caching vs. data caching: TC's 60-second cache controls how often it fetches from Google. But if your WordPress host or caching plugin caches the entire HTML page for 10 minutes, visitors will see stale data regardless. Either exclude the leaderboard page from full-page caching, or use TC's AJAX rendering mode (available under Table Settings → Rendering) so the table loads after the cached page shell.

What Is Advanced: Auto-Numbering Rank Without a Rank Column?

If you sort by Score descending and enable TC's Row number column option (under Table Settings → Display), TC automatically prepends a sequential row number to each row. For a simple competition where ties are not a concern, this eliminates the need for a Rank column in Sheets entirely.

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.

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.

Frequently Asked Questions

What Is the Architecture?

Your Google Sheet is the single source of truth. Organizers update it however they want, manually, via a form, or via a script. TableCrafter polls the sheet on a 60-second cache interval and re-renders the table for the next visitor after a change. The visitor sees near-real-time data without any page refresh mechanism needed on the frontend.

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.

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.

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.