Exportar tu lista de amigos de Steam a CSV o Excel, gratis (sin clave de API)

Guarda todos los amigos de tu cuenta de Steam en una hoja de cálculo: nombre, estado, el juego al que están jugando, SteamID64 y enlace al perfil. Gratis, en tu navegador, sin clave de la API de Steam y sin conectar tu cuenta a ninguna web.

Inicia sesión en steamcommunity.com y abre tu página de Amigos (Perfil > Amigos); luego ejecuta el script. Funciona con la lista de amigos de cualquiera si es pública.

export-friends.js · 117 líneaspégalo en la consola (F12) de steamcommunity.com
// Responsive Muse · Steam Friends List Exporter · v1.0 · 2026-11-12
// Saves a Steam friends list (yours, or anyone's whose friends list is public) to CSV or TXT:
// name, status, game being played, SteamID64 and profile link. Handy to back up your friends
// before a ban, an account move or a purge. Runs only on a steamcommunity.com profile's Friends
// page. It reads the list the page already shows: it makes no network requests of its own and
// never reads cookies, passwords or tokens.
(async () => {
  const TOOL = 'Exportar amigos de Steam';
  const FORMAT = 'csv';        // 'csv' (Excel, Sheets) or 'txt' ("Name - profile link", one per line)
  const SORT = 'page';         // 'page' (as Steam shows them: in-game, online, offline) or 'name' (A to Z)

  if (location.hostname !== 'steamcommunity.com' || !/^\/(id|profiles)\/[^/]+\/friends\/?$/.test(location.pathname)) {
    alert('Abre primero una página de Amigos, por ejemplo la tuya:\nhttps://steamcommunity.com/my/friends/');
    return;
  }
  // A small box on the page shows progress and asks before changing anything,
  // so you never need to read or edit the console.
  const many = (n, word) => `${n} ${n === 1 ? word : ({ canal: 'canales', 'canción': 'canciones', 'publicación': 'publicaciones', 'elemento guardado': 'elementos guardados', lugar: 'lugares' })[word] || word + 's'}`;   // 1 vídeo, 2 vídeos
  const panel = (() => {
    const box = document.createElement('div');
    box.style.cssText = 'display:block!important;position:fixed;right:16px;bottom:16px;z-index:2147483647;width:340px;max-width:calc(100vw - 32px);' +
      'background:#111318;color:#e6e8ee;font:14px/1.5 system-ui,sans-serif;border-radius:12px;padding:16px;' +
      'box-shadow:0 8px 30px rgba(0,0,0,.4);text-align:left';
    const head = document.createElement('strong');
    head.textContent = TOOL;
    const msg = document.createElement('p');
    msg.style.cssText = 'margin:8px 0 12px;white-space:pre-line';
    const row = document.createElement('div');
    row.style.cssText = 'display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end';
    box.append(head, msg, row);
    document.body.append(box);
    const button = (label, primary, onClick) => {
      const b = document.createElement('button');
      b.textContent = label;
      b.style.cssText = 'font:600 14px system-ui,sans-serif;padding:8px 14px;border-radius:8px;cursor:pointer;' +
        (primary ? 'background:#0f766e;color:#fff;border:1px solid #0f766e' : 'background:none;color:#e6e8ee;border:1px solid #3a3f4b');
      b.onclick = onClick;
      row.append(b);
    };
    return {
      text(t) { msg.textContent = t; },
      ask(t, yes) {
        msg.textContent = t;
        row.replaceChildren();
        return new Promise(r => {
          button('Cancelar', false, () => { row.replaceChildren(); r(false); });
          button(yes, true, () => { row.replaceChildren(); r(true); });
        });
      },
      stoppable(onStop) { row.replaceChildren(); button('Parar', false, onStop); },
      actions(t, list) {
        msg.textContent = t;
        row.replaceChildren();
        list.forEach(([label, primary, run]) => button(label, primary, run));
      },
      finish(t) { this.actions(t, [['Cerrar', true, () => box.remove()]]); },
      close() { box.remove(); },
    };
  })();
  // Offer the result as a downloaded file or as clipboard text (a real click, so it always works)
  const deliver = (summary, body, file) => {
    const save = () => {
      const a = document.createElement('a');
      a.href = URL.createObjectURL(new Blob([/\.csv$/.test(file) ? '\ufeff' + body : body], { type: 'text/plain;charset=utf-8' }));
      a.download = file;
      a.click();
      setTimeout(() => URL.revokeObjectURL(a.href), 5000);
      panel.text(`${summary}\nGuardado como ${file} (mira tu carpeta de Descargas).`);
    };
    const copy = () => navigator.clipboard.writeText(body)
      .then(() => panel.text(`${summary}\nCopiado. Pégalo en una hoja de cálculo o en una nota.`))
      .catch(() => panel.text(`${summary}\nEl navegador ha bloqueado el portapapeles: usa Descargar.`));
    panel.actions(summary, [['Cerrar', false, () => panel.close()], ['Copiar', false, copy], ['Descargar', true, save]]);
  };

  // 1. Every friend is already on the page (Steam doesn't paginate this list)
  const rows = [...document.querySelectorAll('.search_results [data-steamid]')];
  if (!rows.length) {
    panel.finish('No se han encontrado amigos. La lista de amigos es privada o está vacía. Si ves amigos en la página, puede que Steam haya cambiado su diseño: avísanos en responsive-muse.com.');
    return 0;
  }

  // 2. One row per friend
  const status = el => /\bin-game\b/.test(el.className) ? 'Jugando' : /\bonline\b/.test(el.className) ? 'En línea' : 'Desconectado';
  const list = rows.map((el, i) => {
    const box = el.querySelector('.friend_block_content');
    const small = box?.querySelector('.friend_small_text');
    const game = small?.querySelector('.friend_game_link')?.textContent.trim() || '';
    const nick = box?.querySelector('.nickname, .player_nickname_hint')?.textContent.trim() || '';
    return {
      order: i + 1,
      name: (box?.firstChild?.textContent || '').trim() || el.dataset.steamid,
      nick,
      status: status(el),
      game,
      // signed in on your own list, Steam adds "Last Online 3 days ago" next to offline friends
      detail: game ? '' : ((box?.querySelector('.friend_last_online_text') || small)?.textContent || '').replace(/\s+/g, ' ').trim(),
      id: el.dataset.steamid,
      url: (el.querySelector('a.selectable_overlay')?.href || `https://steamcommunity.com/profiles/${el.dataset.steamid}`).split('?')[0],
    };
  });
  if (SORT === 'name') list.sort((x, y) => x.name.localeCompare(y.name, undefined, { sensitivity: 'base' }));

  // 3. Build the file and offer it
  const cell = v => '"' + String(v).replace(/"/g, '""') + '"';
  const body = FORMAT === 'txt'
    ? list.map(f => `${f.name} - ${f.url}`).join('\n')
    : ['Nombre,Apodo,Estado,Jugando a,Última conexión,SteamID64,URL del perfil', ...list.map(f =>
        [f.name, f.nick, f.status, f.game, f.detail, f.id, f.url].map(cell).join(','))].join('\n');
  const playing = list.filter(f => f.status === 'Jugando').length;
  const online = list.filter(f => f.status === 'En línea').length;
  const owner = (window.g_rgProfileData?.personaname || document.querySelector('.profile_small_header_name')?.textContent || 'steam').trim();
  deliver(`Listo: ${many(list.length, 'amigo')}: ${playing} jugando, ${online} en línea.`, body,
    `steam-friends-${owner.replace(/[\\/:*?"<>|\s]+/g, '_')}.${FORMAT}`);
  return list.length;
})();

🛡️ ¿Chrome te dice «No pegues código…»? Es normal. Escribe allow pasting en la consola (o permitir pegar si tu Chrome está en español), pulsa Intro y vuelve a pegar. Solo hace falta una vez.

¿Por qué avisa Chrome?

Chrome lo muestra la primera vez que alguien pega algo en la consola, para proteger de estafas en las que te piden pegar código desconocido. Hace bien en avisar, y por eso este script está entero a la vista: 117 líneas comentadas que no envían nada a ningún sitio ni tocan tus contraseñas o cookies. Por qué es seguro.

¿Prefieres no usar la consola? Arrastra el botón Exportar amigos de Steam a tu barra de marcadores y haz clic en él estando en steamcommunity.com. Así no sale el aviso.

Marcador: arrastra el botón del medio a tu barra de marcadores, abre steamcommunity.com y pulsa el marcador. Ejecuta el mismo script con las opciones de arriba.

Por qué es seguro ejecutarloComprobación automática superada 9 nov 2026 · probado en una cuenta real el 12 nov 2026
  • No envía nada a ningún sitio. Sin fetch, XHR ni scripts externos. La única actividad de red es la de steamcommunity.com cargando tu lista.
  • No toca tu sesión. No lee cookies, contraseñas, tokens ni el almacenamiento del navegador.
  • Solo funciona en steamcommunity.com. En cualquier otra web se detiene antes de hacer nada.
  • Corto y legible. 117 líneas comentadas, sin minificar ni ofuscar.
  • Muestra su progreso en la página. Un pequeño recuadro te dice qué está haciendo y al final te ofrece Descargar o Copiar.
  • El mismo código para todos. SHA-256 de la versión por defecto: a3daf69959484aca…
Compruébalo tú mismo en 30 segundos
  1. Léelo: todas las líneas están arriba, con comentarios.
  2. Busca en el código fetch, XMLHttpRequest, cookie, localStorage o eval. No aparece ninguna.
  3. Abre la pestaña Red (Network) antes de ejecutarlo: solo verás peticiones a steamcommunity.com.
¿Te ha funcionado?

Cómo usarlo

  1. Inicia sesión en steamcommunity.com y abre tu página de Amigos (Perfil > Amigos, o directamente steamcommunity.com/my/friends).
  2. Abre la consola: F12 o Ctrl+Mayús+J (Cmd+Opción+J en Mac). Si Chrome te lo pide, escribe permitir pegar y pulsa Enter.
  3. Copia el script, pégalo en la consola y pulsa Enter. Lee la lista que la página ya muestra y te ofrece el archivo al momento.

Qué obtienes

Una fila por amigo: nombre, apodo (si le pusiste uno), estado (jugando, en línea o desconectado), el juego al que está jugando ahora, SteamID64 y enlace al perfil. El SteamID64 no cambia nunca, aunque cambie de nombre o de URL personalizada, así que siempre podrás encontrarlo. Elige TXT para una lista simple «Nombre – enlace».

¿Por qué guardarla?

Steam no permite exportar los amigos. Si te banean o te roban la cuenta, o empiezas una nueva, la lista desaparece y buscar a la gente por el nombre es adivinar. Un CSV con los SteamID64 se hace en un segundo y te deja volver a añadir a todos.

Preguntas frecuentes

¿Steam permite exportar la lista de amigos?

No. Steam solo muestra la lista, y pedir tus datos a Soporte de Steam tarda días. Este script guarda la lista que ya tienes abierta como hoja de cálculo en un segundo.

¿Para qué guardar mis amigos?

Si te banean o te roban la cuenta, o te pasas a otra, pierdes la lista. Con el SteamID64 y el enlace al perfil de cada amigo puedes encontrarlos y volver a añadirlos.

¿Necesito una clave de API o dar mi contraseña?

No. El script lee la página de Amigos en tu propia pestaña, con la sesión que ya tienes. No envía nada a ningún sitio y nunca toca tu contraseña.

¿Puedo exportar los amigos de otra persona?

Sí, si su lista de amigos es pública. Si dice 0 amigos, la lista es privada.

¿Por qué «Jugando a» sale vacío en casi todos?

Solo muestra el juego al que está jugando ese amigo ahora mismo. Steam no muestra en esta página la fecha en que os hicisteis amigos, así que no se puede exportar.

Más herramientas para Steam

Exportar y hacer copia