Connect your Meta ad account
Meta gives ROAStify your daily ad spend. That turns sales into ROAS, profit and an Ember Score — the number the podium ranks by. Read-only: we can't touch a campaign, a budget or a creative.
Each store gets its own ad account
On the Stores page every store has a Meta ads panel. Connect the ad account that runs that store's ads there; a second store connects its own. Already connected an account for another store? Pick it from the list instead of pasting the token again.
Why a system user
A normal Meta login token expires within hours (about 60 days if you extend it), and then the store quietly drops off the podium. A system user is a robot account in your Business settings: its token can be set to never expire, and it doesn't break when someone changes a password or leaves the business. It takes ten minutes once.
Step by step
Do it on a computer, as an admin of the business that owns the ad account.
- 1
Create a Meta app
On Meta for Developers, create an app and pick the use case for creating and managing ads with the Marketing API. Connect it to your business portfolio when asked. Development mode is all you need — reading your own ad account doesn't go through App Review.
My Apps→Create app→Create & manage ads with Marketing APIOpen developers.facebook.com ↗ - 2
Add a system user
In your Business settings, add a system user — the Employee role is enough. It's a robot account, so its token doesn't die when someone changes a password or leaves the business.
Business settings→Users→System users→AddOpen Business settings ↗ - 3
Give it the ad account
Assign the store's ad account to the system user. View-only access is plenty: ROAStify only reads spend.
Assign assets→Ad accounts→View performance - 4
Generate the token
Generate a new token for your app, set it to never expire and tick only ads_read. Copy it straight away — Meta shows it once. If your app isn't in the list, add it to the business first (Accounts → Apps → Add).
Generate new token→Your app→Never→ads_readread-only, nothing else - 5
Copy the ad account ID
In Ads Manager the ID is in the account menu and in the address bar after act=. Digits only; the act_ prefix is fine too.
Open Ads Manager ↗ - 6
Paste both on the store
On the Stores page, open Meta ads on that store and paste the ID and the token. We check them with Meta on the spot and pull the last 30 days of spend. One store, one ad account — connect each store on its own.
What ROAStify can see
Daily ad spend
per ad account, in the account's own currency and time zone
Impressions and clicks
account totals per day — no campaigns, ads or audiences
Tokens are encrypted (AES-256-GCM) before they touch the database. Unlink the store or delete the system user's token in Meta and access stops immediately.
If something goes wrong
“Invalid OAuth access token”+
The token was cut off when you copied it, or it was revoked. Generate a new one and paste it whole.
“Missing permissions” or a message about ads_read+
The token doesn't carry ads_read, or the system user wasn't given the ad account. Do step 3, then generate a fresh token with ads_read ticked.
“Unsupported get request… does not exist”+
Wrong ad account ID, or the token can't see that account. Copy the ID from Ads Manager again and check the account is assigned to the system user.
There's no “System users” in my Business settings+
Only admins of the business portfolio can create them. Ask an admin to do steps 2–4 for you. A token from Graph API Explorer works for a quick test, but it expires within hours.
It worked, then stopped+
User tokens expire (hours, or about 60 days when extended); system user tokens set to never expire don't. If you used a user token, switch to a system user and paste the new token on the store.
Spend in, roast out.
Open your roomStill need the store itself? Connect Shopify first →