Purpose
Evaluate a G2A product listing for a requested title, price, seller information, and visible risk signals. Report evidence-based observations only; do not describe G2A or a seller as definitively safe or scam-free.
When to Use
Use when the caller provides a product name, optionally a target price, and wants to know whether buying the corresponding G2A listing appears reasonable. The caller may provide a product URL or product identifier; otherwise resolve the opaque product ID from G2A search results.
Workflow
- If no product URL or opaque ID is provided, navigate directly to
https://www.g2a.com/search?query={query}. In the same page evaluation, select product anchors whosehrefmatches/-i\\d+(usually a slug followed byiand the numeric product ID), and choose the result whose normalized visible text best matches{query}and the requested platform/region. Return its absolute URL and extracted ID. Do not guess an ID. - Navigate directly to the resolved product URL, normally
https://www.g2a.com/{slug}-i{product-id}. Allow the dynamically rendered offer area to load. Ifdiv[data-testid='ppa-offers-list__show-more-btn'] > button[type='button']exists, activate it once to reveal additional offers, then extract the loaded page. The main offer container is commonly[data-testid='ppa-offers-list'](with#offersor an[id*='offer']fallback). - Run this self-contained evaluator on the product page after offers are visible:
(() => {
const clean = v => (v || '').replace(/\\s+/g, ' ').trim();
const text = el => clean(el?.innerText || el?.textContent || '');
const money = s => (s.match(/(?:[$€£]|USD|EUR|GBP)\\s*[0-9]+(?:[.,][0-9]{1,2})?/i) || [])[0] || null;
const price = s => money(s) || ((s.match(/[0-9]+(?:[.,][0-9]{1,2})?\\s*(?:€|\\$|£)/) || [])[0] || null);
const links = [...document.querySelectorAll('a[href]')].map(a => ({
text: text(a), href: new URL(a.getAttribute('href'), location.href).href
})).filter(x => x.text && x.href.includes(location.host));
const offerNodes = [...document.querySelectorAll('[data-testid="ppa-offers-list"] [data-testid*="offer"], [data-testid="ppa-offers-list"] [data-testid*="seller"], [data-testid*="offer"], [data-testid*="seller"], [class*="offer"], [class*="seller"]')];
const offers = [];
const seen = new Set();
for (const el of offerNodes) {
const t = text(el);
if (!t || t.length < 8 || t.length > 1200) continue;
const key = t.slice(0, 500);
if (seen.has(key)) continue;
seen.add(key);
const sellerLink = [...el.querySelectorAll('a[href]')].find(a => /seller|user|store|profile/i.test(a.getAttribute('href') || ''));
const rating = (t.match(/\\b(?:[1-5](?:[.,]\\d)?\\s*(?:out of 5|\\/5)|[0-9]{1,3}(?:[.,][0-9]+)?%)/i) || [])[0] || null;
offers.push({text: t, price: price(t), rating, seller: sellerLink ? text(sellerLink) : null});
if (offers.length >= 30) break;
}
const body = text(document.body);
return {
url: location.href,
title: clean(document.querySelector('h1')?.textContent || document.title),
listedPrices: [...new Set((body.match(/(?:[$€£]|USD|EUR|GBP)\\s*[0-9]+(?:[.,][0-9]{1,2})?/gi) || []))].slice(0, 20),
offers,
visibleSignals: {
keyType: (body.match(/Steam|Xbox|PlayStation|Nintendo|key|account|offline|activation/i) || [])[0] || null,
regionTerms: [...new Set((body.match(/global|worldwide|EU|Europe|US|USA|region lock|region restricted/gi) || []))],
refundTerms: [...new Set((body.match(/refund|return|money back|guarantee/gi) || []))],
warnings: [...new Set((body.match(/warning|non-refundable|VPN|scam|risk|restricted|account/i) || []))]
},
relevantLinks: links.filter(x => /seller|support|refund|terms|review|rating/i.test(x.text + ' ' + x.href)).slice(0, 40)
};
})()- Compare the displayed total price, product/platform/region, seller rating and review count if exposed, offer age or sales history if exposed, payment/refund terms, and any account-versus-key or region-lock warning. A low price alone is not evidence of fraud. Recommend checking the exact seller, region, delivery type, refund policy, and payment protection before purchase.
Site-Specific Gotchas
- G2A search is directly addressable with
https://www.g2a.com/search?query={query}; product pages use a slug plus an opaque numeric identifier such as...-i10000503129005. - Never construct the numeric product ID from the title. Resolve it from a matching search result first, especially where multiple editions or platforms exist.
- The offer list may initially be collapsed. The observed reveal control is
div[data-testid='ppa-offers-list__show-more-btn'] > button[type='button']; use it only when present, then extract again. - Offers may render asynchronously after navigation; allow the offer area to populate before evaluating. The observed container selector is
[data-testid='ppa-offers-list'], with#offersor an[id*='offer']fallback. - Product and seller markup can change and class-based selectors may be less stable than
data-testidattributes. Treat an emptyoffersarray as incomplete evidence rather than proof that no sellers exist. - G2A is a marketplace, so platform trust does not establish that every seller or listing is safe. Distinguish marketplace-level information from seller-specific evidence and avoid guarantees.
Expected Output
Return the canonical product URL, matched product title, platform and region, displayed price(s), seller/offer rows, ratings or review counts when available, key/refund/region warnings, and a concise risk assessment. Explicitly state which evidence was visible and that the assessment cannot guarantee a scam-free purchase.