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

# Geografía de la audiencia

Consulta el país asociado a una cuenta pública de X y calcula la distribución geográfica de una audiencia a partir de sus seguidores.

> **Nota:** consulta ejemplos y análisis de distribución por país en la [guía de geografía de audiencias](https://api.sorsa.io/blog/twitter-audience-geography-api).

***

## El endpoint `/about`

Devuelve metadatos de la sección About de una cuenta pública: país, cambios de nombre, estado y fecha de inicio de X Premium (Blue), origen y afiliación a una organización.

### Solicitud

```bash theme={null}
curl "https://api.sorsa.io/v3/about?username=elonmusk" \
  -H "ApiKey: YOUR_API_KEY"
```

```python theme={null}
import requests

resp = requests.get(
    "https://api.sorsa.io/v3/about",
    headers={"ApiKey": "YOUR_API_KEY"},
    params={"username": "elonmusk"},
)
print(resp.json())
```

### Parámetros

| Parámetro   | Tipo   | Obligatorio | Descripción              |
| :---------- | :----- | :---------- | :----------------------- |
| `username`  | string | Uno de tres | Nombre sin @.            |
| `user_id`   | string | Uno de tres | ID numérico.             |
| `user_link` | string | Uno de tres | URL completa del perfil. |

### Respuesta

```json theme={null}
{
  "country": "United States",
  "username_change_count": 1,
  "last_username_change_at": "2021-01-01T00:00:00Z",
  "premium_start_at": "2026-03-14T18:30:35Z",
  "is_blue_verified": true,
  "source": "US App Store",
  "affiliate_username": null
}
```

### Campos de respuesta

| Campo                     | Tipo                     | Descripción                                                                                                                                       |
| :------------------------ | :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ |
| `country`                 | string                   | País asociado a la cuenta según señales de la plataforma, no el campo Location de la biografía. Devuelve `"Unknown"` si no hay datos suficientes. |
| `username_change_count`   | integer                  | Número total de cambios de nombre de usuario.                                                                                                     |
| `last_username_change_at` | string (ISO 8601) o null | Fecha del último cambio de nombre; `null` si nunca cambió.                                                                                        |
| `premium_start_at`        | string (ISO 8601) o null | Inicio de la suscripción X Premium (Blue); `null` si no está suscrita.                                                                            |
| `is_blue_verified`        | boolean                  | Indica si tiene la marca Blue de X Premium.                                                                                                       |
| `source`                  | string                   | Origen mostrado en About, como la región de la tienda o el cliente utilizado para registrarse; por ejemplo, `"US App Store"`.                     |
| `affiliate_username`      | string o null            | Nombre de la organización o cuenta principal afiliada; `null` si no hay afiliación.                                                               |

Para analizar geografía solo necesitas `country`. Los demás campos vienen en la misma respuesta y se incluyen aquí como referencia.

***

## Flujo de análisis geográfico

Para calcular la distribución de la audiencia por país:

1. Obtén los seguidores con `GET /v3/followers`.
2. Consulta `GET /v3/about` para cada seguidor utilizando `user_id`.
3. Agrupa y cuenta los valores de `country`.

```python theme={null}
import requests
import time
from collections import Counter

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": API_KEY}


def get_followers(username, max_pages=10):
    followers, cursor = [], None
    for _ in range(max_pages):
        params = {"username": username}
        if cursor:
            params["next_cursor"] = cursor
        resp = requests.get(f"{BASE_URL}/followers", headers=HEADERS, params=params, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        followers.extend(data.get("users", []))
        cursor = data.get("next_cursor")
        if not cursor:
            break
        time.sleep(0.1)
    return followers


def get_country(user_id):
    resp = requests.get(
        f"{BASE_URL}/about",
        headers=HEADERS,
        params={"user_id": user_id},
        timeout=15,
    )
    resp.raise_for_status()
    return resp.json().get("country") or "Unknown"


def audience_geography(username, max_follower_pages=5):
    followers = get_followers(username, max_pages=max_follower_pages)
    countries = Counter()
    for user in followers:
        countries[get_country(user["id"])] += 1
        time.sleep(0.05)  # stay within 20 req/s
    return countries, len(followers)
```

### Coste

Cada llamada a `/about` consume una solicitud. Una muestra de 1.000 seguidores requiere aproximadamente 1.005 solicitudes: 1.000 consultas de país y 5 páginas de seguidores de 200 perfiles. Las 100 solicitudes gratuitas, sin tarjeta, permiten probar una muestra menor. Consulta los [precios](https://api.sorsa.io/pricing).

***

## Exportar a CSV

```python theme={null}
import csv

def export_to_csv(countries, total, path="geography.csv"):
    with open(path, "w", newline="") as f:
        w = csv.writer(f)
        w.writerow(["country", "count", "percentage"])
        for country, count in countries.most_common():
            w.writerow([country, count, round(count / total * 100, 2)])
```

***

## Precisión de los datos

`country` es el país que devuelve `/about`; `location` es un campo distinto de texto libre. Presenta el país como una etiqueta de la cuenta, no como residencia verificada ni ubicación precisa.

* Conserva `"Unknown"` como categoría independiente e indica su proporción en la muestra. No inventes un país ni conviertas solicitudes fallidas en resultados de país desconocido.
* Las primeras páginas de seguidores forman una muestra ordenada. Indica tamaño y fecha de recopilación; no supongas que representan toda la audiencia.
* Compara distribuciones obtenidas con el mismo método de muestreo. Una muestra mayor no elimina por sí sola el sesgo de selección.

***

## Guías relacionadas

* [Seguidores y cuentas seguidas](https://docs.sorsa.io/es/followers-and-following)
* [Descubrimiento del público objetivo](https://docs.sorsa.io/es/target-audiences-Discovery)
* [Análisis de competidores](https://docs.sorsa.io/es/Competitor-Analysis)
* [Verificación de campañas](https://docs.sorsa.io/es/Marketing-Campaign-Verification)
* [Referencia: información About de la cuenta](https://docs.sorsa.io/es/api-reference/usuarios/informaci%C3%B3n-de-la-cuenta)
