> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudthinker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Optimize Troubleshooting

> Find and fix Optimize problems: billing access, scans with no data, findings you can't change, anomalies, and reports.

Every Optimize problem sits at one stage, from reading billing data to acting on a finding. Find the symptom below, then work through its cause, check, and fix, following the link to the page that covers the feature in full.

## Find the stage

| Symptom | Stage | Go to |
| - | - | - |
| The first scan fails with a billing access message | Billing access | [Billing access](#billing-access) |
| The scan finishes, but the numbers are empty or late | Scan and data | [Scan and data](#scan-and-data) |
| You can't move, mark, edit, or act on a finding | Roles | [Roles and permissions](#roles-and-permissions) |
| **Implement** won't change anything | Write access | [Implement](#implement) |
| The board or the savings total looks wrong | Findings | [Findings and the savings total](#findings-and-the-savings-total) |
| Anomalies, Cost Explorer, or reports misbehave | Other pages | [Anomalies](#anomalies), [Cost Explorer](#cost-explorer), [Reports](#reports) |

## Billing access

> **AWS Cost Explorer access is required**
>
> **Cause:** the connected role can't call `ce:GetCostAndUsage`. **Check:** the IAM role in that account has `ReadOnlyAccess` or a custom policy with the Cost Explorer reads, and Cost Explorer is turned on in the AWS console. On a new account it can take up to 24 hours to return data. **Fix:** attach `ReadOnlyAccess` (recommended), then click **Retry scan**. The custom policy from the [quickstart](https://docs.cloudthinker.io/guide/cost-optimization/quickstart.md#troubleshooting) on its own lets billing load but blocks resource-level findings, so use it only if you can't attach `ReadOnlyAccess`.

> **GCP billing export is not readable**
>
> **Cause:** the service account can't read the BigQuery billing data. If you see **GCP billing export is required** instead, the project has no Standard export table. **Check:** the service account has **BigQuery Data Viewer** and **BigQuery Job User** on the project that holds the export. **Fix:** grant the missing roles, or turn on the Standard export, then pick the table under **GCP billing export table**. See the [GCP connection guide](https://docs.cloudthinker.io/guide/connections/gcp.md).

> **Azure Cost Management is not readable**
>
> **Cause:** Cost Management rejected the query. **Check:** the app registration has **Cost Management Reader** on the subscription, and, on a Microsoft Customer Agreement, **Billing profile reader** on the billing profile. **Fix:** assign the missing role to the service principal, then pick the scope again under **Azure billing scope**. See the [Azure connection guide](https://docs.cloudthinker.io/guide/connections/azure.md).

> **An alert says Optimize refresh is paused or data may be stale**
>
> **Cause:** the last billing refresh failed, for example because of a missing permission or an unreadable billing source. The last good data stays readable, and the cloud connection stays connected. **Check:** read the alert on **Optimize → Overview**. **Fix:** use **Copy policy** if it shows a missing permission, **Check connection** to review credentials, then **Retry refresh**. See [Cost anomalies](https://docs.cloudthinker.io/guide/cost-optimization/anomalies.md#troubleshooting).

## Scan and data

> **The scan finished but there is no cost data**
>
> **Cause:** the provider returned no spend for the last full month or the current month, or billing data hasn't arrived yet. AWS Cost Explorer can lag usage by 24 to 48 hours. **Check:** for GCP, confirm the BigQuery table you picked is the Standard export and has rows. **Fix:** wait, then click **Run scan again** (on **Findings** the same action is **Re-scan**). See the [Optimize quickstart](https://docs.cloudthinker.io/guide/cost-optimization/quickstart.md#troubleshooting).

> **The page says no scan has run on this account yet**
>
> **Cause:** this account has never been scanned, so the savings total stays at \$0. **Check:** the selector next to the page title shows the account you expect. **Fix:** select **Run scan**. After the first scan, the button reads **Re-scan**. See [Optimize findings](https://docs.cloudthinker.io/guide/cost-optimization/recommendations.md#refresh-findings).

> **Scan finished with errors**
>
> **Cause:** some services couldn't be scanned, usually because of a missing read permission or a billing problem. The board keeps the findings that completed. **Check:** the page alert names the problem and counts the services that failed. **Fix:** fix the permission or billing problem, then select **Re-scan**. See [Optimize findings](https://docs.cloudthinker.io/guide/cost-optimization/recommendations.md#refresh-findings).

> **The latest month looks low or is missing**
>
> **Cause:** providers finalize billing after usage happens. AWS Cost Explorer can lag by 24 to 48 hours. **Check:** the **Updated** time in the page header. **Fix:** leave **Daily refresh** on so Optimize picks up late billing data on its own. See [Cost Explorer](https://docs.cloudthinker.io/guide/cost-optimization/analytics.md#troubleshooting).

## Roles and permissions

What each workspace role can do in Optimize:

| Task | Minimum workspace role |
| - | - |
| Read every Optimize page, open reports | Viewer |
| Run a scan, turn the daily refresh on or off, move, edit, or assign a finding, start a finding action such as **Implement**, ask CloudThinker, generate and schedule reports | Developer |
| Connect a cloud account, mark a finding as expected, snoozed, or disputed | Admin |

Organization Owners and Admins hold workspace Admin in every workspace. See [Roles](https://docs.cloudthinker.io/guide/security/roles.md).

> **I don't see Run scan or the daily refresh switch**
>
> **Cause:** your workspace role is Viewer. **Check:** your role in [Workspace users](https://docs.cloudthinker.io/guide/workspace-users.md). **Fix:** ask a workspace Admin for the Developer role.

> **I can't drag cards, edit, or assign a finding**
>
> **Cause:** your role is Viewer. Moving, editing, and assigning need Developer or higher. **Check:** your role in [Workspace users](https://docs.cloudthinker.io/guide/workspace-users.md). **Fix:** ask a workspace Admin for the Developer role.

> **Mark options are greyed out**
>
> **Cause:** marking a finding as expected, snoozed, or disputed needs the workspace Admin role, because a mark changes what Optimize raises and counts later. **Check:** your role in [Workspace users](https://docs.cloudthinker.io/guide/workspace-users.md). **Fix:** ask a workspace Admin to apply the mark, or to change your role. See [Mark a finding that needs no action](https://docs.cloudthinker.io/guide/cost-optimization/recommendations.md#mark-a-finding-that-needs-no-action).

> **Add schedule is locked or a report card does nothing**
>
> **Cause:** generating and scheduling reports need Developer or higher. The tooltip says "You don't have permission to schedule reports." **Check:** your role in [Workspace users](https://docs.cloudthinker.io/guide/workspace-users.md). **Fix:** ask a workspace Admin to change your role. See [Optimize reports](https://docs.cloudthinker.io/guide/cost-optimization/reports.md#troubleshooting).

## Implement

**Implement** is the only Optimize action that changes your cloud. It needs write access on the connection, and the [quickstart](https://docs.cloudthinker.io/guide/cost-optimization/quickstart.md) grants read-only permissions, so a quickstart connection can analyze a finding but can't change it.

> **Implement says it can't make the change**
>
> **Cause:** the connection is read-only. Either the role, service account, or service principal lacks the write permission, or **Allow writes** is off on the connection. **Check:** read the conversation for a refused change or an access-denied error from the provider, then open the connection's detail panel under **More → Workspace settings → Connections**. **Fix:** grant only the write permissions this change needs and turn **Allow writes** on. See write access for [AWS](https://docs.cloudthinker.io/guide/connections/aws.md#write-access), [GCP](https://docs.cloudthinker.io/guide/connections/gcp.md#write-access), and [Azure](https://docs.cloudthinker.io/guide/connections/azure.md#write-access). Then start **Implement** again.

> **Implement stopped before changing anything**
>
> **Cause:** every action first checks that the resource still exists and still matches the finding, and **Implement** also stops if a dependency would break or there's no way to roll back. **Check:** the conversation says what changed or what blocked the change. **Fix:** select **Re-scan** to refresh the finding, or use **Generate Guidelines** for a manual plan. See [Act on a finding](https://docs.cloudthinker.io/guide/cost-optimization/recommendations.md#act-on-a-finding).

> **Implement is waiting for an approval**
>
> **Cause:** your workspace's [Approvals](https://docs.cloudthinker.io/guide/approvals/overview.md) settings sent the change to a person. On the default **Auto · Rules + AI · Ask me** mode, an Allow Rule or AI judgment can let a safe change run without asking. On **Manual**, every change waits for a person. **Check:** the approval request in the conversation. **Fix:** approve or reject it. To stop the asks for changes like this one, add an Allow Rule; it takes effect once CloudThinker turns on [Rule enforcement](https://docs.cloudthinker.io/guide/approvals/rules.md#troubleshooting) for your workspace. To be asked every time instead, choose **Manual**.

## Findings and the savings total

> **The board is empty but findings exist**
>
> **Cause:** every open finding is marked, or a filter hides them. **Check:** the page says findings are marked expected or snoozed, or a search or filter is set. **Fix:** select **Show hidden findings**, or clear the search and the **Service**, **Effort**, and **Risk** filters. See [Optimize findings](https://docs.cloudthinker.io/guide/cost-optimization/recommendations.md#troubleshooting).

> **The total is \$0 but the board has findings**
>
> **Cause:** no finding meets all three conditions for counting. The visible findings are **No action**, marked, or already **Implemented** or **Ignored**. **Check:** the **Quick wins** and **Needs review** cards and the status columns on **Findings**. **Fix:** nothing to fix if that's the real state. See [Which findings count](https://docs.cloudthinker.io/guide/cost-optimization/savings.md#which-findings-count).

> **The Findings total doesn't match Overview**
>
> **Cause:** a **Service** filter is set on **Findings**. **Check:** the filter bar above the board. **Fix:** clear the filter and the two totals match.

> **The total changed without a new scan**
>
> **Cause:** the total is shared across the workspace. A snooze date passed, or a teammate moved, marked, cleared a mark on, or edited a finding. A dispute the agent upheld on a scan also removes a finding. **Check:** open the finding. Its **Activity** tab lists status changes and edits, and a mark shows who set it and when. **Fix:** move or edit the finding back if the change was a mistake. See [Savings estimates](https://docs.cloudthinker.io/guide/cost-optimization/savings.md#troubleshooting).

> **The total looks too high**
>
> **Cause:** two findings can estimate savings against the same spend, so the total is an upper bound. **Check:** compare the resources on the largest findings. **Fix:** count overlapping findings once in your forecast. See [Why it is an upper bound](https://docs.cloudthinker.io/guide/cost-optimization/savings.md#why-it-is-an-upper-bound).

> **The card says No previous scan baseline**
>
> **Cause:** the comparison needs a previous completed scan for that account. **Check:** the account has had only one scan. **Fix:** the comparison appears after the next scan finishes.

## Anomalies

> **No anomalies appear for a new account**
>
> **Cause:** detection needs 14 finalized days of history per service. **Check:** the page shows **Baseline preparing** with how many finalized days are available. **Fix:** wait for billing history to build up. If the account is older, check that the daily refresh is on in the Optimize page header. See [Cost anomalies](https://docs.cloudthinker.io/guide/cost-optimization/anomalies.md#troubleshooting).

> **A spike I can see in my cloud console isn't listed**
>
> **Cause:** the provider hasn't finalized that day's billing yet, the increase is below the size threshold, or it's a decrease. **Check:** compare the date with **Billing data through**. **Fix:** wait for the day to finalize. Decreases and small changes aren't flagged.

> **Mark reviewed or Investigate with CloudThinker is missing**
>
> **Cause:** your role is Viewer, or the anomaly is retracted. **Check:** your role in [Workspace users](https://docs.cloudthinker.io/guide/workspace-users.md), and the **Retracted** tab for the anomaly. **Fix:** for a Viewer, ask a workspace Admin for the Developer role. A retracted record is read-only.

## Cost Explorer

> **No cost history yet**
>
> **Cause:** the account has no completed billing month in Optimize yet. **Check:** the first scan finished on **Overview**. **Fix:** wait for the first full calendar month of billing. See [Cost Explorer](https://docs.cloudthinker.io/guide/cost-optimization/analytics.md#troubleshooting).

> **Couldn't load Cost Explorer**
>
> **Cause:** the request failed. Your saved data isn't affected. **Check:** the connection status in **More → Workspace settings → Connections**. **Fix:** click **Retry**.

> **The sparkle icon or Ask why doesn't appear**
>
> **Cause:** per-row asking works only when you group by **Service**. **Check:** the **Group by** setting. **Fix:** switch **Group by** to **Service**, or use **Ask CloudThinker** in the toolbar. If the icon appears but the panel says **Chat access is required to ask CloudThinker**, your role is Viewer: asking needs Developer or higher.

> **Couldn't open the investigation**
>
> **Cause:** the conversation didn't start. Your question is kept. **Check:** the connection status in **More → Workspace settings → Connections**. **Fix:** click **Retry** to send it again.

## Reports

> **A report says data is missing or stale**
>
> **Cause:** the account's billing refresh failed or hasn't run yet. **Check:** the refresh alert on **Optimize → Overview** for the account. **Fix:** follow the alert, then generate the report again. See [Optimize reports](https://docs.cloudthinker.io/guide/cost-optimization/reports.md#troubleshooting).

> **A scheduled run shows Failed**
>
> **Cause:** the run ended without saving a report. **Check:** generate the same report now from its card and read the error in the conversation. **Fix:** fix what the error names. If the manual run succeeds, the next scheduled run should too.

> **A new account isn't in my All accounts schedule**
>
> **Cause:** schedules keep the accounts captured when they were created. **Check:** the schedule's account list. **Fix:** delete the schedule and create it again with **All accounts** selected.

## Next steps

> **[Optimize quickstart](https://docs.cloudthinker.io/guide/cost-optimization/quickstart.md)**
>
> Connect an account and run the first scan

> **[Optimize findings](https://docs.cloudthinker.io/guide/cost-optimization/recommendations.md)**
>
> Work findings through the board and act on them


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.