# Looker Studio dashboard

> Connect Rankfinity to Looker Studio through Google Sheets. One feed per dataset, step by step, plus a downloadable sample dashboard spec.

## What you need

- A Rankfinity project with data: rank checks, a map scan, an AI Visibility run, a site audit and a saved backlink profile. A dataset with no data yet says so in its `status` column.
- A Google account for Google Sheets and Looker Studio. Both are free.
- Edit access to the project in Rankfinity, so you can create feeds.

Looker Studio has no built-in source that reads a CSV from a web address. The path below uses Google Sheets as the bridge: Sheets reads each feed with `IMPORTDATA`, and Looker Studio reads the sheet. Nothing here spends credits.

## Step 1 · Create one feed per dataset

1. In Rankfinity open **My account › API & feeds**. Choose the project at the top of the **Feeds** card.
2. For each dataset, pick it in the list, give it a name such as `looker rankings`, and click **Create feed**. Use **No expiry**, or a long expiry such as 365 days.
3. Copy the link now. It is shown once. Repeat until you have one link per dataset you want.

| Dataset | What it holds | Used for |
|---|---|---|
| `rankings-history` | every rank check, per keyword, location and device | position over time |
| `map-arp-history` | every map scan, per keyword: ARP, average rank, share of points where the business shows | map grid over time |
| `aiv-history` | every finished AI Visibility run, per AI app, plus an `overall` row | visibility over time |
| `audit-history` | every finished site audit: score and failed checks | site health over time |
| `backlinks-history` | every saved backlink profile: referring domains, backlinks, dofollow, rank | link growth |

The older datasets (`rankings`, `aiv`, `audit-issues`, `backlinks`) hold only the latest state. Use them for a "now" table.

## Step 2 · Put each feed in a sheet tab

1. Create a new Google Sheet. Name the first tab after the dataset, for example `rankings-history`.
2. In cell **A1** paste the formula with your link:

   ```
   =IMPORTDATA("https://app.rankfinity.app/api/feeds/v1/rf_feed_....csv")
   ```

3. Add a new tab for each further dataset and repeat. Keep one dataset per tab.
4. Wait a few seconds. Row 1 is the column names. Check the `status` column: `ok` means a real row. Any other text explains why there is no data yet.

Sheets refreshes `IMPORTDATA` about once an hour. To refresh now, retype the formula or press Ctrl+R (Cmd+R on a Mac).

**Limit.** Google Sheets reads at most about 50,000 cells per `IMPORTDATA`. Rankfinity sends the newest rows first, up to 5,000 rows per feed, so a cut keeps the most recent data. If a tab stops short, the sheet has reached Google's limit for one import.

## Step 3 · Connect Looker Studio to the sheet

1. Open [lookerstudio.google.com](https://lookerstudio.google.com) and choose **Create › Data source**.
2. Pick the **Google Sheets** connector. Choose your sheet and the tab, for example `rankings-history`.
3. Keep **Use first row as headers** on. Click **Connect**.
4. Repeat from step 2 for each tab, so you end with one data source per dataset.

## Step 4 · Check the field types

Looker Studio guesses the type of each column. Check these in the data source editor:

- `date` should be **Date & time**. If Looker shows it as **Text**, change the field type. If it still does not parse, use a calculated field that converts the text. The dates are ISO 8601 in UTC, for example `2026-10-17T09:30:00Z`.
- `position`, `arp`, `visibility_pct`, `score`, `referring_domains` and the other numbers should be **Number**.
- `measured` should be **Boolean**.

Do not change a number to a text field. An empty cell means the value was not measured. It is never a zero, so Looker will show a gap, which is the right picture.

## Step 5 · Build the dashboard

Download the sample spec and use it as the list of pages, charts and fields to build:

**[Download the sample dashboard spec (JSON)](/api/feeds/looker-studio-spec.json)**

It has five sources, one per dataset, and five pages: Rankings, Map grid, AI Visibility, Site health and Backlinks. Each chart names its source, its date dimension and its metric. The file holds no data.

Add a filter to every chart: **status = ok**. This hides the explanation rows.

Useful settings:

- **Rankings.** Average position over time, split by device. Lower is better. Unmeasured checks are blank.
- **Map grid.** ARP over time, split by keyword. Lower is better. ARP counts a point where the business does not show as 21, the same as the app.
- **AI Visibility.** Visibility per AI app over time. Exclude the `all` rows from this chart, and use them for one overall scorecard.
- **Site health.** Audit score over time, and failed checks over time.
- **Backlinks.** Referring domains and backlinks over time.

## Keep it fresh

Rankfinity updates the feeds after each check, audit or scan. Looker Studio reads the sheet on its own refresh schedule, and a sheet only picks up new data when `IMPORTDATA` refreshes. For a daily picture, a daily sheet refresh is enough.

## Something does not look right

- **The sheet shows one row that says a sentence.** That dataset has no data yet, for example "no site audit has finished yet". Run the check in Rankfinity, then wait for the next refresh.
- **The sheet shows `#REF!` or an error.** Check that the link is complete and that the feed is still active. A revoked or expired feed returns the same `404` as a wrong link.
- **Looker shows a different number than the app.** The app shows the newest result on each screen. A history feed holds every check, so compare the same date and the same keyword.
- **You want a CSV file instead.** Open a feed link in a browser and save the page as a `.csv` file, then use Looker Studio's **File upload** source. This is a manual refresh, so the Sheets route above is better for a live dashboard.

## Safety

A feed link is a read-only key to one dataset of one project. Do not paste it into a shared document. Revoke it under **My account › API & feeds** when a person leaves, and create a new one. See [Feeds for Google Sheets and Looker Studio](/docs/feeds) for the full rules.

