Is E-commerce Side-to-side to AI safe?
We analyzed E-commerce Side-to-side to AI version 19.227's actual code and gave it a 72/100 trust score. This is a broadly purpose-aligned…
Bottom line
This is a broadly purpose-aligned product-comparison extension with medium access and security concerns, plus affiliate-link behavior that users should understand.
What it can access
The extension can read selected product information from many shopping sites and modify the chosen AI site's chat input. [Q1] [Q2] It sends product details and sometimes exact product URLs to the AI provider selected by the user. [Q6] [Q14]
Security weaknesses
After one click, it opens an AI service, fills the comparison request, and submits it without another confirmation. [Q8] Production-minified application files make review harder, but no remote command channel or dangerous code execution was found. [Q10] [Q16] [Q11]
Signs of misuse
Exports can add the developer’s affiliate information to Amazon and Walmart links, and ChatGPT launches include a referral marker. [Q17] The developer also receives an email address entered for subscription lookup. [Q6] No hidden tracking or browser-session theft was found. [Q12] [Q14]
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It requests host access to many regional shopping sites, four AI chat sites and its developer services, plus context menus, storage and scripting. This broad but enumerated scope matches product comparison and one-click AI summarization.
Declares contextMenus, storage and scripting plus explicit shopping, AI and developer hosts; it does not request <all_urls>. — manifest.json:1-76
Describes right-click product comparison, open-tab import, AI prompts, CSV export and subscription features that use the declared access. — _locales/en/messages.json:1-224
Which websites can it run on, and can it read or change what appears on those pages?
It reads selected marketplace pages by fetching their HTML and extracting product title, price, images, ratings and specifications. It changes only the selected AI site's composer when the user requests an AI summary; it has no persistent shopping-page page access.
fetch(productUrl) parses returned HTML with marketplace-specific parser classes and stores structured comparison fields locally. — popup.js:2
Finds the supported AI composer and send button, inserts the prepared prompt and clicks Send. — inject.js:1
Contains no static content_scripts entry; AI injection is registered temporarily from the extension popup. — manifest.json:1-76
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
It writes a prepared product-comparison prompt into an AI chat input and submits it. It does not read existing AI chats, passwords, payment fields or unrelated typing.
Writes only the stored one-time prompt into a known ChatGPT/Claude/Mistral/Gemini/Grok composer selector and clicks its submit button. — inject.js:1
Constructs the prompt from parsed product specifications, prices and URLs rather than reading user-entered fields from the AI page. — popup.js:2
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
The popup queries open tabs and displays available HTTP tab titles/URLs so the user can select products. It does not request cookies, history, bookmarks or downloads, and I found no upload of the tab list.
chrome.tabs.query({}) maps available tabs to title/url, sorts them and renders a local selection checklist. — popup.js:2
No cookies, history, bookmarks, tabs or downloads permission is declared; host permissions may expose tab metadata for matching sites. — manifest.json:1-76
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
No evidence of this behavior was found in the reviewed package.
Declares none of file, geolocation, capture, clipboard, management or nativeMessaging capabilities. — manifest.json:1-76
Uses chrome.storage.local for products/notes and chrome.storage.sync for ordering/preferences/subscription state. — popup.js:2
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
It sends the user-entered email to extension.ecommercesidetoside.com to look up a subscription, fetches selected product pages from their own stores, and sends generated product details to the AI provider the user selects. It does not send the comparison database to the developer.
The only application fetches are fetch(productUrl) and POST to /customer/{email}/subscriptions; the latter returns plan data. — popup.js:2
AI-site insertion/submission sends the prepared product prompt through the provider's own page. — inject.js:1
Product records and notes use chrome.storage.local rather than a developer endpoint. — popup.js:2
Does it download or run code, settings, or instructions supplied by a remote server?
No evidence of this behavior was found in the reviewed package.
Marketplace parsers, AI URLs/selectors, plans and comparison logic are bundled constants and functions. — popup.js:2
Uses fixed packaged selectors for each AI provider; no remote configuration is loaded. — inject.js:1
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
Most actions require a context-menu or popup click. After a single Run on AI click, however, it opens the provider, fills the prompt and submits automatically without a second confirmation; install/update can also open the developer's onboarding page.
AI button handler registers inject.js, stores the prompt and opens the provider tab. — popup.js:2
On page load, consumes the stored prompt, edits the composer and clicks the send button, then clears the pending prompt. — inject.js:1
Opens ecommercesidetoside.com/after-install.html on install and certain upgrades. — background.js:1
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence of this behavior was found in the reviewed package.
Declares no browser override, search, proxy, privacy, management or debugger capability. — manifest.json:1-76
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
The popup, options and onboarding applications are production-minified React bundles, which makes them harder to inspect, but the small service worker and AI injector remain understandable and no obfuscation or generated string decoder was found.
Lists a 525 KB popup bundle, 431 KB options bundle and 427 KB onboarding bundle plus small background/inject scripts. — inventory.json:1-456
Identifies bundled third-party dependencies used in the minified application. — popup.js.LICENSE.txt:1-118
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No evidence of this behavior was found in the reviewed package.
Manifest V3 default extension-page CSP applies and no unsafe-eval override is declared. — manifest.json:1-76
Focused scan of all listed JavaScript files found no executable-text sink. — inventory.json:1-456
Does it track the websites, pages, searches, or links you visit?
No evidence of this behavior was found in the reviewed package.
Tab enumeration feeds the local open-tabs checklist; no network call receives that list. — popup.js:2
Tab listeners only notify the extension comparison UI that a tab was created/removed and track its own popup tab ID. — background.js:1
Does it create a persistent ID or browser fingerprint to recognize you?
No evidence of this behavior was found in the reviewed package.
Derives marketplace product IDs or a deterministic URL hash solely for local item storage/deduplication. — background.js:1
Contains no analytics endpoint, generated client ID or telemetry call. — popup.js:2
Does it send cookies, session details, authentication data, or page contents elsewhere?
The selected AI service receives the generated product-comparison prompt, including specifications and sometimes prices and exact product URLs. The developer receives the email entered for plan lookup; raw cookies, AI tokens and shopping-session credentials are not extracted or sent.
Multi-product prompt includes title, price, url and parsed specs; single-product prompt includes the parsed specs. — popup.js:2
Inserts that prompt into the chosen provider's composer and submits it through the existing webpage session. — inject.js:1
Subscription request places the entered email in the HTTPS developer API path and sends an empty POST body. — popup.js:2
Does it record typing, form entries, clipboard contents, or screenshots?
It edits and submits a supported AI site's composer after the user selects that provider. It does not monitor typing, ordinary forms, clipboard or screenshots.
Writes innerHTML, innerText or value depending on provider and invokes the matching send button. — inject.js:1
No clipboard or capture permission is present. — manifest.json:1-76
Can a website or remote server send commands that make the extension take actions?
No evidence of this behavior was found in the reviewed package.
No externally_connectable declaration or web-accessible privileged script is present. — manifest.json:1-76
Registers internal tab/context-menu behavior but no onMessageExternal listener. — background.js:1
Does it alter links, referral codes, advertisements, shopping carts, or search results?
CSV export replaces Amazon/Walmart tracking parameters with the developer's affiliate IDs, and the ChatGPT launch URL carries ref=ecommercesidetoside. It does not rewrite links inside arbitrary webpages, carts or search results.
affiliateQueryParams defines Amazon tag=ecommext and Walmart partner/campaign IDs; CSV export calls the affiliate-link helper before writing product URLs. — popup.js:2
Run on ChatGPT opens https://chatgpt.com/?ref=ecommercesidetoside. — popup.js:2
AI-site content script edits only the chat composer and submit control, not commerce links or carts. — inject.js:1
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
No evidence of this behavior was found in the reviewed package.
No webRequest, declarativeNetRequest, proxy, debugger or downloads permission is declared. — manifest.json:1-76
The product fetch reads HTML into DOMParser; export constructs a local CSV Blob/data URL. — popup.js:2
Can it communicate with software on the computer or services running on localhost?
No evidence of this behavior was found in the reviewed package.
Host permissions are named public marketplace, AI and developer domains; nativeMessaging is absent. — manifest.json:1-76
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
No evidence of this behavior was found in the reviewed package.
Remote product HTML is parsed with DOMParser and local parser classes; subscription JSON is read as plan data. — popup.js:2
No remote script source or unsafe-eval CSP is declared. — manifest.json:1-76
Can ordinary websites access privileged extension features through messaging or exposed files?
No evidence of this behavior was found in the reviewed package.
Declares neither externally_connectable nor web_accessible_resources. — manifest.json:1-76
Registers inject.js only after the user clicks a bundled provider button, scoped to that URL's host and isolated world. — popup.js:2
Uses chrome.storage.local rather than page postMessage or DOM attributes for its one-time prompt channel. — inject.js:1
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Feature visibility and limits branch on parsed marketplace and stored subscription plan; no covert target list or environment check was found. — popup.js:2
Install/update branch opens onboarding and removes old storage migrations, not selective payload behavior. — background.js:1
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Sequentially fetches only products in the user's comparison and bounds retry attempts. — popup.js:2
Service worker handles context menus, popup-tab bookkeeping and install events without compute-heavy loops. — background.js:1
Does it change form fields or where a form sends its information?
It intentionally edits the chosen AI chat input and activates its send button after the user's Run on AI click. It does not rewrite a form action or alter unrelated shopping/login/payment forms.
Selects known provider composer and submit-button elements, assigns the prepared prompt and clicks or dispatches a click to submit. — inject.js:1
No persistent content script is installed on marketplaces; shopping data is fetched from the extension page. — manifest.json:1-76