Cómo exportar correos a Excel / Google Sheets

Si necesitas tus correos electrónicos en una hoja de cálculo, aquí tienes exactamente cómo hacerlo. Hay aplicaciones que analizarán y exportarán tus mensajes de correo y los datos extraídos a una hoja de cálculo de Google. ActorAi también puede ayudarte con esto.

Aquí tienes una lista concisa de casos de uso comunes para exportar correos a Excel o Hojas de cálculo de Google:

  • Exportar notificaciones de pedidos y envíos.
  • Exportar contactos de correo electrónico para actualizaciones de CRM o de la base de datos.
  • Analizar direcciones de correo rebotadas para la gestión de listas.
  • Compartir problemas abiertos o solicitudes con equipos usando hojas de cálculo compartidas.
  • Importar datos estructurados de correo electrónico en bases de datos o aplicaciones empresariales.
  • Hacer copias de seguridad y archivar correos electrónicos comerciales importantes.
  • Crear listas de distribución a partir de contactos y direcciones.
  • Extraer información financiera y de gastos para informes.

Exportar correos de Gmail a Google Sheets

Opción A – Con el complemento de Google Workspace (más fácil)

  • Abrir Google Sheets → Extensiones → Complementos.
  • Buscar el complemento “Gmail to Sheets” (elige el que más se ajuste a tus necesidades)
  • Instalar y conectar la cuenta de Gmail.
  • Seleccionar etiqueta/carpeta o filtro de búsqueda.
  • Ejecutar exportación → los datos aparecen en tu hoja.
  • Consejo: configura la actualización automática para actualizar diariamente.

Opción B – Con Google Apps Script (método DIY)

  • Extrae correos que coinciden con una búsqueda de Gmail (etiqueta, from:, subject:, after:, etc.)
  • Los escribe en la hoja activa con columnas limpias
  • Agrega un menú personalizado: Exportar correo electrónico → Ejecutar exportación
  • Te permite controlar: consulta de búsqueda, correos máximos y si incluir los cuerpos de los mensajes

Configurar Google Apps Script (método DIY para exportar a Excel)

  1. Abre una nueva Hoja de cálculo de Google.
  2. Extensiones → Editor de Apps Script.
  3. Elimina cualquier código y pega el script siguiente.
  4. Haz clic Guarda, luego Ejecutar → onOpen() para agregar el menú personalizado.
  5. De vuelta en la Hoja, ve a Exportar correo electrónico → Configurar hoja (crea una pestaña Config y encabezados).
  6. Introduce tu búsqueda en Config!B2 (ejemplos más abajo), luego Exportar correo electrónico → Ejecutar exportación.
/**************************************
 * Gmail → Google Sheets Exporter
 * Simple, DYI method for tech advanced.
 **************************************/

const CONFIG_SHEET = 'Config';
const OUTPUT_SHEET = 'Emails';
const PROPERTY_STORE = PropertiesService.getDocumentProperties();

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Email Export')
    .addItem('Setup sheet', 'setupSheet')
    .addItem('Run export', 'exportEmails')
    .addToUi();
}

function setupSheet() {
  const ss = SpreadsheetApp.getActive();
  // Config sheet
  let conf = ss.getSheetByName(CONFIG_SHEET);
  if (!conf) conf = ss.insertSheet(CONFIG_SHEET);
  conf.clear();

  conf.getRange('A1').setValue('Setting');
  conf.getRange('B1').setValue('Value');

  const rows = [
    ['Search query', 'label:inbox newer_than:30d'], // B2
    ['Max emails to fetch (per run)', 500],          // B3 (limit to avoid timeouts)
    ['Include message body? (true/false)', false],   // B4
    ['Body max characters', 5000],                  // B5
    ['Continue from last run? (true/false)', false]  // B6
  ];
  conf.getRange(2, 1, rows.length, 2).setValues(rows);
  conf.autoResizeColumns(1, 2);

  // Output sheet
  let out = ss.getSheetByName(OUTPUT_SHEET);
  if (!out) out = ss.insertSheet(OUTPUT_SHEET);
  out.clear();

  const headers = [
    'Date',
    'From',
    'To',
    'Subject',
    'Snippet',
    'Thread ID',
    'Message ID',
    'Labels',
    'Has Attachments',
    'Thread Link',
    'Message Link',
    'Body (optional)'
  ];
  out.getRange(1, 1, 1, headers.length).setValues([headers]);
  out.setFrozenRows(1);
  out.autoResizeColumns(1, headers.length);

  SpreadsheetApp.getUi().alert('Setup complete. Enter your query in Config!B2, then run "Email Export → Run export".');
}

function getConfig_() {
  const ss = SpreadsheetApp.getActive();
  const conf = ss.getSheetByName(CONFIG_SHEET);
  if (!conf) throw new Error('Config sheet missing. Run "Setup sheet" first.');

  const getVal = (row) => conf.getRange(row, 2).getValue();

  return {
    query: String(getVal(2) || '').trim(),
    maxEmails: Number(getVal(3) || 500),
    includeBody: String(getVal(4)).toLowerCase() === 'true',
    bodyMaxChars: Number(getVal(5) || 5000),
    continueFromLast: String(getVal(6)).toLowerCase() === 'true',
  };
}

function exportEmails() {
  const cfg = getConfig_();
  if (!cfg.query) throw new Error('Please fill a Gmail search in Config!B2.');

  const ss = SpreadsheetApp.getActive();
  const out = ss.getSheetByName(OUTPUT_SHEET) || ss.insertSheet(OUTPUT_SHEET);

  // Resume support (optional)
  let startIndex = 0;
  if (cfg.continueFromLast) {
    startIndex = Number(PROPERTY_STORE.getProperty('startIndex') || 0);
  } else {
    PROPERTY_STORE.deleteProperty('startIndex');
    // If not continuing, start fresh by clearing previous rows (keep header)
    const lastRow = out.getLastRow();
    if (lastRow > 1) out.getRange(2, 1, lastRow - 1, out.getLastColumn()).clearContent();
  }

  const BATCH_SIZE_THREADS = 100; // Gmail returns threads, we’ll page through them
  const rows = [];
  let fetchedEmails = 0;

  while (fetchedEmails < cfg.maxEmails) {
    const threads = GmailApp.search(cfg.query, startIndex, BATCH_SIZE_THREADS);
    if (!threads.length) break;

    for (const thread of threads) {
      const msgs = thread.getMessages();
      for (const msg of msgs) {
        if (fetchedEmails >= cfg.maxEmails) break;

        const date = msg.getDate();
        const from = msg.getFrom();
        const to = msg.getTo();
        const subject = msg.getSubject() || '';
        const snippet = msg.getPlainBody().slice(0, 120).replace(/\s+/g, ' ').trim();
        const threadId = thread.getId();
        const msgId = msg.getId();
        const labels = thread.getLabels().map(l => l.getName()).join(', ');
        const hasAttachments = msg.getAttachments().length > 0;

        const threadLink = `https://mail.google.com/mail/u/0/#all/${threadId}`;
        const messageLink = `https://mail.google.com/mail/u/0/#inbox/${msgId}`;

        let body = '';
        if (cfg.includeBody) {
          // Prefer plain body; fallback to HTML stripped
          body = msg.getPlainBody();
          if (!body) {
            const html = msg.getBody();
            body = stripHtml_(html);
          }
          if (cfg.bodyMaxChars > 0 && body.length > cfg.bodyMaxChars) {
            body = body.slice(0, cfg.bodyMaxChars) + '…';
          }
        }

        rows.push([
          date,
          from,
          to,
          subject,
          snippet,
          threadId,
          msgId,
          labels,
          hasAttachments,
          threadLink,
          messageLink,
          body
        ]);

        fetchedEmails++;
      }
      if (fetchedEmails >= cfg.maxEmails) break;
    }

    startIndex += BATCH_SIZE_THREADS;
    // Safety: avoid 6-minute execution limit
    if (Utilities.getRemainingDailyQuota && rows.length >= 5000) break;
  }

  if (rows.length) {
    out.insertRowsAfter(out.getLastRow() || 1, rows.length);
    out.getRange(out.getLastRow() - rows.length + 1, 1, rows.length, rows[0].length).setValues(rows);
    out.autoResizeColumns(1, out.getLastColumn());
  }

  if (cfg.continueFromLast) {
    PROPERTY_STORE.setProperty('startIndex', String(startIndex));
  }

  SpreadsheetApp.getUi().alert(`Export complete: ${fetchedEmails} emails added.`);
}

function stripHtml_(html) {
  // Lightweight HTML → text
  return String(html || '')
    .replace(/<style[\s\S]*?<\/style>/gi, '')
    .replace(/<script[\s\S]*?<\/script>/gi, '')
    .replace(/<[^>]+>/g, ' ')
    .replace(/\s+/g, ' ')
    .trim();
}

Versión de script simple para Google Sheets.

function exportSimple() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const query = 'label:inbox newer_than:7d';
  const threads = GmailApp.search(query, 0, 100);
  const rows = [['Date','From','Subject','Snippet','Thread Link']];
  threads.forEach(t => {
    t.getMessages().forEach(m => {
      rows.push([
        m.getDate(),
        m.getFrom(),
        m.getSubject(),
        m.getPlainBody().slice(0,120).replace(/\s+/g,' ').trim(),
        'https://mail.google.com/mail/u/0/#all/' + t.getId()
      ]);
    });
  });
  sheet.clear().getRange(1,1,rows.length,rows[0].length).setValues(rows);
}

Exportar correos de Outlook a Excel

1. Usa el método Exportar a CSV en Outlook:

  • Navega a  Archivo > Abrir y exportar > Importar/Exportar.
  • Elige  Exportar a un archivo  y selecciona  Valores separados por comas (CSV).
  • Selecciona la carpeta de correo que quieres exportar (p. ej., Bandeja de entrada).
  • Cuando se solicite, haz clic  Mapear campos personalizados  para seleccionar solo los atributos de correo específicos que necesitas, como  De,  Para,  Asunto,  Fecha de recepción, etc.
  • Completa la exportación y abre el CSV en Excel para ver solo los metadatos.

2. Filtra y copia metadatos en formato de texto en Outlook:

  • Crea una vista personalizada en Outlook con únicamente las columnas deseadas visibles (como remitente, fecha, etc.).
  • Selecciona los correos, copia y luego pega en Excel.
  • Este método puede ser más rápido para lotes pequeños, especialmente si solo estás exportando información específica del encabezado o metadatos.

3. Usa Power Query para una exportación dinámica:

  • Power Query en Excel puede conectarse directamente a Outlook y filtrar únicamente los campos requeridos.
  • Este método permite actualizaciones continuas y automatización manteniendo los datos al mínimo.
  1. Abre Excel y ve a la pestaña Datos.
  2. Selecciona Obtener datos > Desde otras fuentes > Desde Microsoft Exchange.
  3. Ingresa tu dirección de correo de Outlook e inicia sesión para conectar.
  4. Elige la carpeta del buzón (por ejemplo, Bandeja de entrada) que contiene los correos que deseas.
  5. En el Editor de Power Query, selecciona solo las columnas que necesites, como Asunto, De, Para y FechaRecepción.
  6. Aplica cualquier filtro para limitar los correos, por ejemplo por fecha o remitente.
  7. Haz clic en Cerrar y cargar para importar los datos de correo filtrados a una tabla de Excel.
  8. Actualiza la consulta en cualquier momento para refrescar tus datos con correos nuevos o modificados.

Nota: planeamos integrar esto dentro de Actor, como una aplicación de correo. Actualmente estamos explorando el interés.

Nota: exportar a Excel frente a Hojas de cálculo de Google no marca ninguna diferencia. Ambos son grandes herramientas, creadas por Google y Microsoft.

Ahora tienes tus correos en una hoja de cálculo, listos para analizar, filtrar o compartir. Si necesitas esto con regularidad, necesitarás algún tipo de automatización para hacerlo repetidamente, en los intervalos que desees.

Hola, soy ACTOR y estoy diseñado para facilitarles la vida a profesionales con agendas tan ocupadas como la tuya.

Mi misión es ser el mejor aliado digital que hayas tenido: ayudarte a mantener tu agenda bajo control, gestionar tus correos electrónicos y centrarte en lo que de verdad importa.

Vídeos: primeros pasos

Siempre estoy aprendiendo y mejorando para entender mejor tus necesidades con cada interacción.

Puedes contar conmigo para ayudarte a reducir el estrés y recuperar más de tu valioso tiempo.
Juntos nos pondremos al día con tus tareas, mantendremos todo organizado y haremos que cada día sea más productivo.

Déjame ocuparme de los pequeños detalles para que puedas centrarte en lo más importante. ¿Listo para que tu día sea más sencillo? ¡Empecemos!

Pruébame aquí

Nota: Las comparaciones o la información de este artículo o página se basan en datos disponibles públicamente y pueden no ser exhaustivas. Todos los nombres de productos y marcas mencionados son marcas comerciales o marcas registradas de sus respectivos propietarios.