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

# Citation Rank por dominio (con variaciones)

> Crea la clasificación de Citation Rank: dominios ordenados por cuota, con la variación en pp de cada fila frente al periodo anterior.

El panel "Citation Rank" / "Citation Share by Domain" de la app de Profound
es el endpoint de citas agrupado por `root_domain`, ordenado por
`citation_share` de forma descendente, y cada fila muestra la variación de la cuota
frente a la ventana anterior. Dos llamadas (actual + anterior), combinación por dominio
y diferencia entre las cuotas.

## Cómo funciona este ejemplo

1. **`dimensions: ["root_domain"]`**: una fila por dominio citado en cada
   llamada. Ejecuta tanto la ventana actual como la anterior.
2. **Combina por dominio.** Para cada fila de la ventana actual, busca la
   cuota de la ventana anterior (0 de forma predeterminada si falta) y calcula la diferencia.
3. **Ordena por el `citation_share` actual de forma descendente** para que coincida con la interfaz.

<Note>
  **`count` y `citation_share` miden cosas distintas.** `count` es el
  número bruto de citas a ese dominio en la ventana. `citation_share`
  es `count / total_citations` **por modelo de IA, y luego se promedia entre
  modelos**. Un dominio muy citado en un modelo de bajo volumen (p. ej., Perplexity)
  puede tener una cuota mayor que un dominio con más citas totales repartidas
  entre modelos de alto volumen. Las dos columnas no se ordenarán de la misma forma.
  Elige la que corresponda a la pregunta que quieres responder y ordena por ella.
</Note>

<RequestExample>
  ```python Python theme={null}
  import os
  from datetime import date, timedelta
  from profound import Profound

  client = Profound(api_key=os.environ["PROFOUND_API_KEY"])

  # What to fetch — replace with your own values.
  CATEGORY_NAME = "<your-category-name>"
  DAYS          = 7
  INCLUSIVE_END = date(2026, 5, 11)    # the last day of your current window
  TOP_N         = 10


  def get_domain_shares(category_id, start, end):
      """Return {domain: share} for every cited domain in the window."""
      res = client.reports.citations(
          category_id=category_id,
          start_date=start.isoformat(),
          end_date=end.isoformat(),
          metrics=["count", "citation_share"],
          dimensions=["root_domain"],
          filters=[{"field": "prompt_type", "operator": "is", "value": "visibility"}],
          pagination={"limit": 50000, "offset": 0},
      )
      m = res.info.query["metrics"]
      d = res.info.query["dimensions"]
      i_count  = m.index("count")
      i_share  = m.index("citation_share")
      i_domain = d.index("root_domain")
      return {
          row.dimensions[i_domain]: {
              "count": row.metrics[i_count],
              "share": row.metrics[i_share],
          }
          for row in res.data
      }


  def current_and_prior_windows(inclusive_end, days):
      """Two (start, end_exclusive) pairs of equal length, back-to-back."""
      current = (
          inclusive_end - timedelta(days=days - 1),
          inclusive_end + timedelta(days=1),     # +1 day → exclusive end
      )
      prior = (current[0] - timedelta(days=days), current[0])
      return current, prior


  def find_category_id(name):
      """Return the UUID of the category whose name matches (case-insensitive)."""
      for c in client.organizations.categories.list():
          if c.name.lower() == name.lower():
              return c.id
      raise ValueError(f"No category named {name!r}")


  # Resolve name → ID, run current + prior, then build the leaderboard with deltas.
  category_id    = find_category_id(CATEGORY_NAME)
  current, prior = current_and_prior_windows(INCLUSIVE_END, DAYS)

  current_domains = get_domain_shares(category_id, *current)
  prior_domains   = get_domain_shares(category_id, *prior)

  rows = sorted(
      (
          {
              "domain":    name,
              "count":     d["count"],
              "share":     d["share"],
              "delta_pp":  (d["share"] - prior_domains.get(name, {"share": 0})["share"]) * 100,
          }
          for name, d in current_domains.items()
      ),
      key=lambda r: r["share"],
      reverse=True,
  )[:TOP_N]

  for rank, r in enumerate(rows, start=1):
      sign = "+" if r["delta_pp"] >= 0 else "−"
      delta_str = f"{sign}{abs(r['delta_pp']):.1f} pp"
      print(f"{rank:>2}. {r['domain']:<32} {r['share']:>6.1%}  {delta_str}")
  ```

  ```bash curl theme={null}
  export PROFOUND_API_KEY=your_api_key_here

  # Current window
  curl -X POST "https://api.tryprofound.com/v1/reports/citations" \
    -H "X-API-Key: $PROFOUND_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "category_id": "your-category-uuid",
      "start_date": "2026-05-05",
      "end_date": "2026-05-12",
      "metrics": ["count", "citation_share"],
      "dimensions": ["root_domain"],
      "filters": [{"field": "prompt_type", "operator": "is", "value": "visibility"}],
      "pagination": {"limit": 50000, "offset": 0}
    }'

  # Previous window — same body, prior dates. Merge by root_domain client-side
  # to compute the per-row share delta.
  curl -X POST "https://api.tryprofound.com/v1/reports/citations" \
    -H "X-API-Key: $PROFOUND_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "category_id": "your-category-uuid",
      "start_date": "2026-04-28",
      "end_date": "2026-05-05",
      "metrics": ["count", "citation_share"],
      "dimensions": ["root_domain"],
      "filters": [{"field": "prompt_type", "operator": "is", "value": "visibility"}],
      "pagination": {"limit": 50000, "offset": 0}
    }'
  ```
</RequestExample>

## Desglose por página

Sustituye `root_domain` por `url` en `dimensions` para obtener las principales **páginas** citadas
(una fila por URL) en lugar de los principales dominios citados.
