> For the complete documentation index, see [llms.txt](https://help.seoutils.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.seoutils.app/guide/manage-serp-data.md).

# Manage SERP Data

<figure><img src="/files/MVGJk41gUTyCvx9J5ubc" alt=""><figcaption><p>SERP Data</p></figcaption></figure>

### SERP Data Exporter / Importer

You can export your SERP data from one computer and easily import it onto another, making it convenient to work across multiple devices. This helps reduce costs for [SERP Clustering](/guide/serp-clustering.md), [N.A.P Finder](/guide/n.a.p-finder.md), and [Organic Rank Tracker](/guide/organic-rank-tracker.md).

Additionally, SEO Utils supports importing external SERP data, making it an ideal solution when migrating your SERP data from other tools.

In the screenshot below, I uploaded over **18,000 keywords** to the SERP Clustering tool and used SERP data from the past 7 days. The cost came to just **$0.0390**, saving me **$11.2470**! SEO Utils only sent **65 keywords** to the SERP API for new data, as most of the keywords already had recent SERP data within 7 days.

<figure><img src="/files/AVZTBwZv79UoSvLGP9y3" alt=""><figcaption><p>Save money when using old SERP data.</p></figcaption></figure>

### Delete Old SERP Data

By default, SEO Utils stores all your SERP data in a database indefinitely. However, as your database grows over years of running SERP Clustering, you may notice slower performance.

To address this, you can view your SERP database size and set a data retention period. Any SERP data older than this period will be automatically deleted at startup, helping the app run reports—like SERP Clustering and Organic Rank Tracker—more efficiently.

<figure><img src="/files/YUT04rGYzL6OLT97qZUb" alt=""><figcaption><p>SERP Database Manager</p></figcaption></figure>

In the example above, I've set the retention period to **90 days (3 months)**, so SEO Utils will only keep SERP data from the past 90 days on my computer. You can adjust this to any timeframe you like, such as 365 days for one year, or set it to 0 to store data indefinitely.

### DataForSEO SERP Data Getter

{% hint style="info" %}
Available since v1.38.3
{% endhint %}

This feature allows you to directly import SERP data from DataForSEO by entering task IDs. This is useful when you have existing DataForSEO tasks and want to save their SERP data to your local database for use in [SERP Clustering](/guide/serp-clustering.md), [Organic Rank Tracker](/guide/organic-rank-tracker.md), and other tools.

<figure><img src="/files/cBYRVUhahrhcfnnJPrIG" alt="DataForSEO SERP Data Getter"><figcaption><p>DataForSEO SERP Data Getter</p></figcaption></figure>

**Where to find your task IDs**

Your task IDs are listed in your DataForSEO account under [**API Dashboard → SERP**](https://app.dataforseo.com/api-detail/serp). Each row is a task you have already paid for, with its ID, keyword and creation date. Copy the IDs you want and paste them into SEO Utils, one per line.

{% hint style="warning" %}
DataForSEO keeps completed results for roughly **30 days**. After that the ID can no longer be fetched, so import anything you still need before the window closes.
{% endhint %}

**How to use:**

1. Enter your DataForSEO task IDs (one per line) in the text area
2. Select the search engine type (Organic, or AI Mode)
3. Click "Fetch SERP Data"

The tool will automatically:

* Fetch the SERP data from DataForSEO using the task IDs
* Extract all necessary metadata (keyword, location, language, device type, etc)
* Save the data to your local database

This is particularly helpful when:

* You've run SERP tasks through DataForSEO's API directly
* You want to import historical SERP data from DataForSEO
* You're migrating data from another system that uses DataForSEO

#### Restoring missing days in an Organic Rank Tracker report

By default, this tool saves results into the shared SERP cache only. Turn on **"Also backfill Organic Rank Tracker reports"** and it can also put those results back into the report **and the day** they belong to.

This is for the situation where a tracker run was interrupted — the app closed mid-run, the computer restarted, a run failed part-way — and a day is missing from your report even though you already paid DataForSEO for those results. Instead of re-running the keywords and paying a second time, you paste the task IDs and put the results you already own back where they belong.

<figure><img src="/files/BTIaNpx1u0PYORUx8JdO" alt=""><figcaption><p>The "Also backfill Organic Rank Tracker reports" switch on the DataForSEO SERP Data Getter</p></figcaption></figure>

{% hint style="info" %}
Tracker backfill works with **Organic** results only. AI Mode results are still saved to the shared cache as before.
{% endhint %}

**How it works**

{% stepper %}
{% step %}

#### Paste your task IDs and turn the switch on

* Enter your task IDs, one per line
* Leave **Search Engine Type** on **Organic**
* Turn on **"Also backfill Organic Rank Tracker reports"**
* Click **"Fetch SERP Data"**

There is no task limit in this mode. Long lists are processed in batches of up to 1,000.
{% endstep %}

{% step %}

#### Wait while the tool checks each task

Results are fetched one at a time, so a long list takes a while. The screen shows how many tasks are done and an estimated time remaining, calculated from how fast your own tasks are actually coming back.

You can leave this page, or close the app entirely. The job continues where it stopped when you come back.

<figure><img src="/files/LaVBe33uU0cBWFbpvGsA" alt=""><figcaption><p>Analysis progress showing processed tasks and estimated time remaining</p></figcaption></figure>
{% endstep %}

{% step %}

#### Review the plan before anything is saved

Nothing is written until you confirm. You'll see your results grouped by report and date, marked either **Exact** or **Suggested**, with a preview of what each result contains.

<figure><img src="/files/V8uhDtuCO2fzEtNpNBso" alt=""><figcaption><p>Confirmation screen showing report groups, match confidence and import previews</p></figcaption></figure>
{% endstep %}

{% step %}

#### Choose the groups and confirm

* Tick the groups you want, or click **"Select all exact"**
* Set a destination date for any suggested group
* Tick any confirmation the screen asks for
* Click **"Confirm backfill"**

The import then runs in the background, and you can leave the page.
{% endstep %}
{% endstepper %}

**Exact and suggested matches**

The tool separates what it can prove from what it can only guess, and never applies a guess on its own.

| Match type    | What it means                                                                                                                                           | What you need to do                                                          |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| **Exact**     | The task ID matches a task this app created, so the report and the original day are both known.                                                         | Nothing. These are safe to select and are the ones "Select all exact" picks. |
| **Suggested** | The keyword, location, language, device and other search settings fit a report, but nothing proves the result came from it or which day it belonged to. | Check the destination date, then confirm you understand it is an estimate.   |

{% hint style="warning" %}
A suggested match uses DataForSEO's fetch time as the destination date. That is when the result was **collected**, which is not always the day your tracker was scheduled to run. Set the date yourself if you know better.
{% endhint %}

**The import preview**

Each keyword shows a small card so you can judge a match before importing it, rather than importing first and checking afterwards.

| On the card                        | What it tells you                                  |
| ---------------------------------- | -------------------------------------------------- |
| **#3** (or similar)                | Your tracked domain's best position in this result |
| **Not ranked**                     | The result is valid, but your domain isn't in it   |
| Page title and link                | The exact page that ranked                         |
| Organic results / Other SERP items | How much the fetched result contains               |

The card shows your domain's best organic position. The full result is imported, including other rankings and supported SERP features.

{% hint style="danger" %}
If you change a report's **target domain** or its **Include subdomains** setting after the analysis, the import stops and asks you to analyze the task IDs again. The preview you approved was read under the old settings, so it no longer describes what would be saved.
{% endhint %}

**Tasks with no matching report**

Task IDs that don't fit any tracker keyword can still be imported as ordinary SERP data, using DataForSEO's proven fetch date. This is on by default and changes no tracker positions. A task is only skipped entirely when DataForSEO returns no fetch date and no original task can be found, in which case there is no date that can be trusted.

**Confirmations you may be asked for**

Each checkbox covers a different decision, so you're only asked for the ones that apply.

| Confirmation                  | When it appears                                                                          |
| ----------------------------- | ---------------------------------------------------------------------------------------- |
| Suggested dates are estimates | You selected at least one suggested group                                                |
| Replacing tracker data        | A selected destination already holds data for that date, or you changed a suggested date |
| Replacing shared cache data   | An unmatched task already has data for its fetch date                                    |

<details>

<summary>If the analysis or import reports errors</summary>

The screen lists up to 100 details under **"Review details"**. Common causes:

1. **A task ID DataForSEO no longer has.** Results are kept for roughly 30 days, after which the ID can't be fetched.
2. **A task ID that isn't ready yet.** The result hasn't finished on DataForSEO's side; try it again later.
3. **A report changed after the analysis.** If the keyword, target domain or search settings changed, run the analysis again so the plan matches the report as it is now.
4. **A report is currently running.** A backfill won't compete with a live run for the same report and day. Wait for the run to finish, then analyze the task IDs again.

Results that imported successfully are always kept. Re-running the same task IDs never imports the same result twice — anything already imported is reported as "already imported" and skipped.

</details>

{% hint style="success" %}
Interrupted work is picked up automatically. If the app closes during an analysis or an import, it resumes at the point it reached the next time you open SEO Utils.
{% endhint %}
