Exporta cualquier lista de Amazon (deseos, compra o ideas) a una hoja de cálculo con precios, fechas y enlaces. Funciona en Amazon.es y en cualquier tienda.
Funciona en todas las tiendas de Amazon. Abre la lista que quieres exportar y ejecuta el script.
// Responsive Muse · Amazon Wishlist Exporter · v1.1 · 2026-10-22
// Exports the Amazon list you have open (wishlist, shopping list, idea list) to CSV or TXT:
// title, price, ASIN, link, date added, your comment, quantity wanted and priority.
// Works on any Amazon store (.com, .co.uk, .de, .es, .ca…). Runs only on amazon.*/hz/wishlist.
// The script makes no network requests of its own: Amazon loads the rest of the list as it
// scrolls. It never reads cookies, passwords or tokens.
(async () => {
const TOOL = 'Exportar lista de Amazon';
const FORMAT = 'csv'; // 'csv' (Excel, Sheets) or 'txt' (one product link per line)
if (!/^(www\.|smile\.)?amazon\.[a-z.]+$/.test(location.hostname) || !location.pathname.startsWith('/hz/wishlist/')) {
alert('Abre primero una de tus listas: Cuenta y listas > Tus listas\n(por ejemplo amazon.es/hz/wishlist/ls)');
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' })[word] || word + 's'}`; // 1 vídeo, 2 vídeos
const panel = (() => {
const box = document.createElement('div');
box.style.cssText = '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]]);
};
const sleep = ms => new Promise(r => setTimeout(r, ms));
const rows = () => [...document.querySelectorAll('li[data-itemid]')];
// 1. Scroll to the end until no new items appear three times in a row
let last = -1, idle = 0;
while (idle < 3) {
window.scrollTo(0, document.documentElement.scrollHeight);
await sleep(1500);
const n = rows().length;
idle = n === last ? idle + 1 : 0;
last = n;
panel.text(`Cargando tu lista… ${n} elementos`);
}
// 2. Read every item
const items = rows().map(li => {
const text = sel => (li.querySelector(sel)?.textContent || '').replace(/\s+/g, ' ').trim();
const link = li.querySelector('[id^="itemName_"]');
const asin = ((link?.getAttribute('href') || '').match(/\/dp\/([A-Z0-9]{10})/) || [])[1] || '';
const price = parseFloat(li.getAttribute('data-price'));
return {
title: (link?.getAttribute('title') || link?.textContent || '').trim(),
price: isFinite(price) ? price : '', // empty = currently unavailable
priceShown: text('.a-price .a-offscreen'),
by: text('[id^="item-byline-"]').replace(/^(by|de|von|par|di)\s+/i, ''),
added: text('[id^="itemAddedDate_"]'),
comment: text('[id^="itemComment_"]'),
wanted: text('[id^="itemRequested_"]'),
priority: text('[id^="itemPriority_"]'),
asin,
url: asin ? `${location.origin}/dp/${asin}` : '',
};
});
if (!items.length) {
panel.finish('No se han encontrado productos. Puede que Amazon haya cambiado su diseño: avísanos en responsive-muse.com.');
return 0;
}
// 3. Build the file and offer it
const cell = v => '"' + String(v).replace(/"/g, '""') + '"';
const body = FORMAT === 'txt'
? items.map(i => i.url).filter(Boolean).join('\n')
: ['Título,Precio,Precio mostrado,De,Fecha añadido,Comentario,Deseados,Prioridad,ASIN,URL',
...items.map(i => [i.title, i.price, i.priceShown, i.by, i.added, i.comment, i.wanted, i.priority, i.asin, i.url]
.map(cell).join(','))].join('\n');
const name = (document.querySelector('#profile-list-name')?.textContent.trim() || 'amazon-list')
.replace(/[\\/:*?"<>|]+/g, '_');
deliver(`Listo: ${many(items.length, 'elemento')}.`, body, `${name}.${FORMAT}`);
return items.length;
})();
Marcador: arrastra el botón del medio a tu barra de marcadores, abre www.amazon.com y pulsa el marcador. Ejecuta el mismo script con las opciones de arriba.
- No envía nada a ningún sitio. Sin fetch, XHR ni scripts externos. La única actividad de red es la de www.amazon.com cargando tu lista.
- No toca tu sesión. No lee cookies, contraseñas, tokens ni el almacenamiento del navegador.
- Solo funciona en www.amazon.com. En cualquier otra web se detiene antes de hacer nada.
- Corto y legible. 124 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:
59e87fc5a9f81afd…
Compruébalo tú mismo en 30 segundos
- Léelo: todas las líneas están arriba, con comentarios.
- Busca en el código
fetch,XMLHttpRequest,cookie,localStorageoeval. No aparece ninguna. - Abre la pestaña Red (Network) antes de ejecutarlo: solo verás peticiones a www.amazon.com.
Cómo usarlo
- Abre Tus listas y entra en la lista que quieres exportar.
- Abre la consola: F12 o Ctrl+Mayús+J (Cmd+Opción+J en Mac). Si Chrome te lo pide, escribe
permitir pegar(oallow pastingsi lo tienes en inglés) y pulsa Enter. - Elige las opciones, copia el script, pégalo en la consola y pulsa Enter. Al terminar aparece un recuadro: pulsa Descargar (o Copiar).
Pasar la lista a otra cuenta
Amazon no tiene función de importar listas. Exporta la lista aquí y añade los productos a la nueva cuenta desde los enlaces del archivo.
Preguntas frecuentes
¿Por qué algunos productos salen sin precio?
Esos productos no están disponibles ahora o no tienen oferta, así que Amazon no muestra precio.
¿Puedo exportar la lista pública de otra persona?
Sí, si puedes abrirla. El script lee la lista que tienes en pantalla.
¿Puedo pasar mi lista a otra cuenta?
Expórtala aquí y añade los productos desde los enlaces del archivo. Amazon no tiene función de importar.
