Is AdsMeta — Facebook Ads Manager safe?
We analyzed AdsMeta — Facebook Ads Manager version 5.3.24's actual code and gave it a 40/100 trust score. This is a powerful ad-management extension with…
Bottom line
This is a powerful ad-management extension with sensitive credential handling and a risky privileged bridge to its own websites.
What it can access
It can handle Facebook authentication material, advertising and billing records, and authenticated account actions across broad Facebook pages, which is powerful for this purpose [Q1][Q3][Q14][Q16].
Security weaknesses
A compromised allowed AdsMeta page could obtain session material and perform authenticated Facebook actions without separate confirmation [Q16][Q21][Q24].
Signs of misuse
It sends login credentials, financial account data, persistent tracking information, and Facebook authentication context to AdsMeta services [Q5][Q6][Q13][Q14].
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It has persistent script access across Facebook, Business Manager, Ads Manager, and billing pages, plus scripting, activeTab, storage, alarms, notifications, and broad Facebook/AdsMeta host access. It also exposes an external messaging services to three production AdsMeta origins and two localhost development origins.
Declares permissions, host permissions, externally_connectable origins, seven content-script groups, MAIN-world injection, and web-accessible resources. — manifest.json:21-133
Which websites can it run on, and can it read or change what appears on those pages?
It adds a large account-management sidebar and billing overlay to Facebook pages, reads and changes page page, temporarily wraps fetch/XHR during a billing diagnostic, fills and submits the Business Suite message editor, and can navigate guided monetization checks. It does not secretly rewrite ordinary third-party forms, but it can deliberately operate Meta inputs and actions.
Creates and updates the AdsMeta account/billing interface inside Facebook. — sidebar.js:1-2511
Automates the Business Suite compose box and injects a temporary billing request observer. — background.js:429-497, 575-684
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
It reads Facebook page HTML, URLs, account IDs, tokens, visible monetization status, ad-account balances, spend, limits, roles, business ownership, card display/expiry, and other Graph/GraphQL data. These reads are central to the product but expose sensitive business information.
Fetches or scans Facebook HTML for access and CSRF tokens. — content.js:8-95
Requests extensive ad-account, payment, business, and permission fields. — sidebar.js:2263-2349
Reads visible monetization status from a selected professional dashboard page. — monetizationProbe.js:1-81
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
It stores Facebook access tokens for up to 12 hours in chrome.storage.local and also keeps tokens/CSRF data in session storage. It stores account state, plan and promo data, notifications, persistent install ID, remote config, display preferences, telemetry dedupe, and short-lived billing/monetization tasks.
Copies live Facebook tokens into sessionStorage, chrome.storage.session, and chrome.storage.local. — content.js:151-183
Stores vendor JWT in session storage, remote state locally, and reuses cached Facebook tokens for 12 hours. — background.js:1-12, 146-203, 370-403
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
It processes AdsMeta login email/password, Facebook access and CSRF tokens, account financial data, limited payment-card display and expiry, account permissions, and message text. A billing diagnostic observes payment-related GraphQL operations but redacts card, CVV, token, identity, contact, and address fields twice before short-lived storage.
Implements redacted billing traces and sends AdsMeta login credentials to its authentication endpoint. — background.js:26-81, 575-684, 1189-1212
Displays payment-method display_string and expiry returned by Meta. — sidebar.js:2000-2020
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
It sends AdsMeta login credentials, ratings/comments, promo events, a persistent random install ID, and—when logged in—Facebook ad-account ID, currency, balance, billing threshold, and payment model to adsmeta.io.
Posts install telemetry, selected Facebook financial data, promo events, and login credentials to AdsMeta endpoints. — background.js:185-203, 1117-1128, 1180-1212
External AdsMeta origins can obtain tokens and request authenticated Facebook operations/responses. — background.js:556-979
Does it download or run code, settings, or instructions supplied by a remote server?
It fetches vendor remote config, notifications, plan/promo state, and queued refresh commands. Config can activate a kill switch, enforce a minimum version, change messages, and supply promotional content and destinations; a server command can tell an open dashboard tab to refresh/sync.
Fetches config, remote commands, and notifications from adsmeta.io. — background.js:146-181, 206-257
Renders remotely supplied spotlight copy and links and logs interactions. — sidebar.js:2161-2241
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
page access run automatically on supported Facebook and AdsMeta pages. After AdsMeta login, a background alarm polls the vendor every five minutes for notifications and refresh commands; one-time install telemetry and config fetches run on installation/startup.
Registers automatic content scripts on broad Facebook and AdsMeta routes. — manifest.json:45-126
Creates recurring vendor polling and startup/install calls. — background.js:206-289
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.
Renames an ad account through a Graph POST after the user confirms. — sidebar.js:1508-1574
Implements message sending and image/video upload operations. — background.js:429-553, 755-929
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
No evidence of this behavior was found in the reviewed package.
Readable named functions, literal endpoints, comments, and explicit validation logic. — background.js, content.js, sidebar.js, overlay.js:complete files
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.
Targeted dynamic-code search returned no matches. — background.js, content.js, inject.js, sidebar.js, overlay.js, amsbridge.js:complete scripts
Does it track the websites, pages, searches, or links you visit?
No evidence of this behavior was found in the reviewed package.
Uses pathname and query parameters to identify supported pages and account IDs. — sidebar.js:5-17, 199-207
Queries open Facebook tabs and reads their URLs/session account IDs. — background.js:296-318, 407-425
Does it create a persistent ID or browser fingerprint to recognize you?
It creates a persistent random install ID and sends it with the extension version once. It also stores Facebook c_user to bind a cached token to the signed-in account and logs remote-promotion impressions/clicks/dismissals with item and audience bucket.
Generates, transmits, and persists smeta_ext_install_id. — background.js:183-203
Stores the Facebook c_user alongside token cache metadata. — content.js:171-183
Sends deduplicated spotlight interaction events. — sidebar.js:2231-2241
Does it send cookies, session details, authentication data, or page contents elsewhere?
It extracts live EAA access tokens and fb_dtsg CSRF tokens from Facebook JavaScript, HTML, and same-origin responses; reads c_user; caches access tokens for 12 hours; and exposes tokens/CSRF context to allowed AdsMeta webpages. It stores the AdsMeta account JWT in session storage and sends it only to AdsMeta services.
Reads window.__accessToken and DTSGInitialData in the page's MAIN world. — inject.js:1-21
Extracts and persists Facebook authentication material. — content.js:8-95, 159-183
Fetches/caches tokens and returns token or DTSG values to external AdsMeta requests. — background.js:292-425, 822-850
Does it record typing, form entries, clipboard contents, or screenshots?
It accesses sensitive business and financial records: balances, thresholds, spend, status, limits, ownership, admin/role data, billing dates, and payment-card display/expiry. It can also handle user-entered AdsMeta credentials and outgoing message text.
Fetches and displays extensive account, billing, payment, and permission fields. — sidebar.js:1912-2108, 2263-2349
Redacts payment secrets and processes AdsMeta login input. — background.js:26-81, 1189-1212
Can a website or remote server send commands that make the extension take actions?
Developer-controlled AdsMeta webpages can choose Facebook/Graph URLs, methods, bodies, and headers within broad host allowlists, request operations inside a real Facebook tab with cookies, retrieve access or CSRF tokens, upload media, and trigger message sending. Remote config and backend commands also influence availability, UI, navigation links, and refresh behavior.
External message API validates AdsMeta origin, then exposes token, Graph, GQL-in-tab, uploads, message, and limited generic fetch actions. — background.js:556-979
Remote config and fetch-command polling influence extension behavior. — background.js:146-257
Does it alter links, referral codes, advertisements, shopping carts, or search results?
It inserts developer promotions into Facebook's interface, remotely targets them by plan/audience bucket, rotates them, opens configured links, and reports impressions/clicks/dismissals. This is first-party product promotion rather than hidden affiliate rewriting, but it modifies Facebook pages for commercial messaging.
Renders remote or built-in promotional cards and logs engagement. — sidebar.js:2161-2241
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
A user-started five-minute billing trace replaces page fetch and XMLHttpRequest methods to observe payment-related GraphQL requests and responses. It records only redacted operation metadata in session storage and restores prior hooks when restarted; separately, startup removes legacy DNR header rules rather than adding new ones.
Implements nonce-bound, time-limited fetch/XHR interception with two redaction layers. — background.js:26-81, 575-716
Removes legacy dynamic header rules on install/startup. — background.js:269-289
Can it communicate with software on the computer or services running on localhost?
No evidence of this behavior was found in the reviewed package.
Allows two localhost web origins but declares no nativeMessaging permission. — manifest.json:36-43
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 config, notification, Graph, and vendor responses are parsed or rendered through fixed packaged code. — background.js, sidebar.js:complete files
Can ordinary websites access privileged extension features through messaging or exposed files?
It has several privileged bridges: MAIN-world inject.js posts live Facebook tokens to the isolated page access; internal messages proxy fetches and account actions; and externally connectable AdsMeta/localhost webpages can invoke a broad background services. Sender-origin checks exist, but compromise or XSS on any allowed AdsMeta origin would cross directly into the Facebook session.
Posts live token/CSRF data through window.postMessage. — inject.js:1-21
Receives page messages and exposes internal token/fetch handlers. — content.js:98-183
Implements the externally connectable privileged bridge. — background.js:556-979
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
Behavior changes by remote kill switch, minimum-version gate, plan, promo bucket, spotlight config, backend notifications, queued refresh commands, current Facebook account/page, and explicit task state. The controls are visible in source and bounded, but materially affect what runs and where users are sent.
Caches and applies server config, notifications, and refresh commands. — background.js:146-257
Applies plan/promo/spotlight targeting to Facebook UI. — sidebar.js:1586-1604, 2161-2241
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Runs recurring notification/command polling. — background.js:206-289
Loads multiple account endpoints and monitors SPA/layout changes while supported pages are open. — sidebar.js:2263-2511
Does it change form fields or where a form sends its information?
It opens the AdsMeta app in a popup, navigates Facebook tabs for inbox and guided checks, opens remote promotional links, submits authenticated Graph actions, uploads user-selected files, and can type/send messages. Built-in flows are visibly initiated, but the allowed AdsMeta website can call the same privileged primitives without an extension-level per-action confirmation.
Opens or focuses the AdsMeta web application in a large popup window. — popup.js:1-31
Implements navigation, message sending, uploads, and externally requested Facebook operations. — background.js:429-553, 755-979