# Find unindexed sitemap URLs and push them

Goal: of the pages in your sitemap, find the ones Google doesn't show yet, push only those, and get the result in a few days. Cost: 1 check credit per URL checked, plus 1 index credit per URL pushed, used only if it gets indexed (it comes back after 7 days if not).

## Prompt for your agent

> "Fetch https://example.com/sitemap.xml, collect the page URLs, check which ones Google can't see with FreshlyCited, push those (FreshlyCited re-checks them on day 1, 3 and 7), and tell me the outcome."

## 1. Collect the URLs

Your agent (or script) reads the sitemap and extracts each `<loc>`. For a sitemap index, read the child sitemaps too. Keep only canonical, public https URLs; up to 10,000 per job.

## 2. Check them

```json
{
  "name": "check_index",
  "arguments": {
    "urls": [
      "https://example.com/",
      "https://example.com/blog/new-post",
      "https://example.com/pricing"
    ],
    "name": "Sitemap check, October"
  }
}
```

```bash
curl -X POST https://freshlycited.com/api/v1/check -H "Authorization: Bearer ipk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://example.com/","https://example.com/blog/new-post"],"name":"Sitemap check"}'
```

Larger checks run in a queue: poll until the job's `outcome.stage` is `check_done`.

```json
{
  "name": "get_job_status",
  "arguments": {
    "job_id": "job_…",
    "url_limit": 0
  }
}
```

## 3. Push only the invisible ones

```json
{
  "name": "send_unindexed_to_indexer",
  "arguments": {
    "job_id": "job_…"
  }
}
```

```bash
curl -X POST https://freshlycited.com/api/v1/jobs/job_…/send-unindexed -H "Authorization: Bearer ipk_YOUR_KEY" \
  -H "Content-Type: application/json" -d '{}'
```

This creates a new push with only the URLs Google didn't show. The check becomes the "before" for the visibility lift. If any of those URLs are on a site you [verified for IndexNow](https://freshlycited.com/docs/recipes/verify-site-indexnow), they're also sent to Bing and the other IndexNow engines, free.

**Shortcut:** skip step 2 and push the whole list with `smart: true`. FreshlyCited checks first and only pushes, and charges the push for, the URLs Google can't see:

```json
{
  "name": "submit_index_job",
  "arguments": {
    "urls": [
      "https://example.com/",
      "https://example.com/blog/new-post"
    ],
    "smart": true,
    "name": "Sitemap: October"
  }
}
```

## 4. Read the result

After the day-1, day-3 or day-7 re-check (or any time with `check_index` and the push's `job_id`), `get_job_status` returns an outcome such as *"11 of 12 links seen by Google (+2)"*. Still invisible? Push them again with `send_unindexed_to_indexer`, or give Google a few more days: FreshlyCited gets pages crawled, but Google decides what it shows.


---
Source: https://freshlycited.com/docs/recipes/push-unindexed-sitemap-urls
