Skip to content

Instantly share code, notes, and snippets.

@jozsefs
Created January 3, 2020 20:02
Show Gist options
  • Save jozsefs/092795dc81fbe15ef494b6d3b12c6459 to your computer and use it in GitHub Desktop.
Save jozsefs/092795dc81fbe15ef494b6d3b12c6459 to your computer and use it in GitHub Desktop.
etoro portfolio json export
const data = [...document.querySelectorAll('.ui-table-row')].map(row => ({
market: row.querySelector('.table-first-name').innerText,
units: +row.querySelector('[data-etoro-automation-id=portfolio-overview-table-cell-container-units]').innerText.split('\n')[0].replace(/,/g, ''),
avgOpen: +row.querySelector('[data-etoro-automation-id=portfolio-overview-table-cell-container-open-rate]').innerText,
invested: +row.querySelector('[data-etoro-automation-id=portfolio-overview-table-cell-container-invested]').innerText.slice(1).replace(/,/g, ''),
pl$: +row.querySelector('[data-etoro-automation-id=portfolio-overview-table-cell-container-container-profit]').innerText.replace(/[<,$]/g, ''),
plPercent: +row.querySelector('[data-etoro-automation-id=portfolio-overview-table-cell-container-gain]').innerText.replace(/[<,%]/g, ''),
value: +row.querySelector('[data-etoro-automation-id=portfolio-overview-table-cell-container-equity]').innerText.replace(/[<,$]/g, '')
}));
JSON.stringify(data, null, 2);
@sfnprg
Copy link

sfnprg commented Jul 12, 2025

While copying some traders innerText would throw an error, here a version including also asset name

const assets = [...document.querySelectorAll('.et-table-row-main')].map(row => ({
  market: row.querySelector('[automation-id=portfolio-overview-table-body-cell-market-name]').innerText,
  name: row.querySelector('[automation-id=portfolio-overview-table-body-cell-market-last-name]') ? row.querySelector('[automation-id=portfolio-overview-table-body-cell-market-last-name]').innerText : '',
  units: row.querySelector('[automation-id=portfolio-overview-table-body-cell-units-value]') ? +row.querySelector('[automation-id=portfolio-overview-table-body-cell-units-value]').innerText.split('\n')[0].replace(/,/g, '') : null,
  avgOpen: row.querySelector('[automation-id=portfolio-overview-table-body-cell-avg-open-rate]') ? +row.querySelector('[automation-id=portfolio-overview-table-body-cell-avg-open-rate]').innerText : 0,
  invested: row.querySelector('[automation-id=portfolio-overview-table-body-cell-invested-value]') ? +row.querySelector('[automation-id=portfolio-overview-table-body-cell-invested-value]').innerText.slice(1).replace(/,/g, '') : null,
  pl$: row.querySelector('[automation-id=portfolio-overview-table-body-cell-profit]') ? +row.querySelector('[automation-id=portfolio-overview-table-body-cell-profit]').innerText.replace(/[<,€]/g, '') : null,
  plPercent: row.querySelector('[automation-id=portfolio-overview-table-body-cell-gain]') ? +row.querySelector('[automation-id=portfolio-overview-table-body-cell-gain]').innerText.replace(/[<,%]/g, '') : null,
  value: row.querySelector('[automation-id=portfolio-overview-table-body-cell-equity]') ? +row.querySelector('[automation-id=portfolio-overview-table-body-cell-equity]').innerText.slice(1).replace(/,/g, '') : null,
}));

JSON.stringify(assets);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment