Quick answers to common questions about the MCC PMax script.
The MCC PMax script is a Google Ads script that runs at the MCC (Manager) level to collect Performance Max, Shopping, and Demand Gen campaign data from all accounts in your MCC. It creates individual Google Sheets for each account with detailed insights including search terms, placements, assets, and performance metrics.
The MCC script runs once in your manager account and processes all client accounts automatically. The individual account script (PMax Insights) runs separately in each account. Use the MCC version if you manage 5+ accounts - it will save you significant time.
Yes! The script collects data from Performance Max, Standard Shopping, and Demand Gen campaigns. Accounts with only Standard Shopping campaigns won't be auto-populated into the settings tab on first run (they'll appear in the 'all' tab and you can add them manually). Demand Gen campaigns are auto-detected and collected in separate sheets for each account.
Initial setup takes about 10 minutes. The script then processes the first 5 accounts immediately (typically 15-20 minutes depending on account size) and continues initializing 5 accounts per hour until all accounts are ready.
Initialization is when the script creates the Google Sheet for an account and populates it with data for the first time. This is the most resource-intensive operation. The script processes up to 5 uninitialized accounts per hour to avoid timeouts. Once an account is initialized (marked with a timestamp in column O of the settings tab), it switches to the regular hourly update schedule based on its 'Run At' time in column C.
No, you need to create your own copy of the template sheet. This ensures you have full control and edit access. The script won't work with someone else's sheet due to permission restrictions.
You need Editor access to the MCC account in Google Ads, and your Google account needs permission to create and edit Google Sheets.
Yes, as long as you have Editor access to their MCC account. The script and sheets will be associated with your Google account.
The script processes up to 5 uninitialized accounts per hour. So if you have 50 accounts, all will be initialized in about 10 hours. You can track progress in the 'Initialized' column (O) in the settings tab.
Google Apps Script has a 30-minute execution time limit. Processing 5 accounts per run provides a good balance between speed and reliability. Each account needs to fetch data, create sheets, and write data - this takes time, especially for accounts with lots of campaigns or placement data.
You can increase the MAX_INIT_PER_RUN constant in the script if your accounts are small. However, be aware that larger accounts with more data take longer to process. If you increase this value too high, you risk hitting the 30-minute timeout and some accounts failing to initialize. The default of 5 is a safe balance for most account sizes.
If a timeout occurs, that account won't be marked as initialized and will be retried on the next hourly run. The script is designed to be resilient - it will keep trying until all accounts are processed.
No. Once you've set up the hourly trigger in Step 5 of the Quick Start guide, the script runs automatically every hour. You never need to manually run it again unless you want to troubleshoot.
Once all accounts are initialized, each account's data is refreshed based on its 'Run At' time in column C of the settings tab. For example, accounts set to '03' update between 3:00-3:59am in your MCC's timezone. You can change the Run At time for any account by editing column C.
By default, the script pulls the last 30 days of data. This is hard-coded and can't be changed without modifying the script.
Each tab serves a different purpose: 'all' shows all MCC accounts, 'settings' controls which accounts to process, 'totals' aggregates campaign data, 'daily/weekly/trend' show historical performance, and each account gets its own individual sheet with detailed insights.
The core metrics are fixed, but you can add your own calculated columns in the sheets. Just don't delete or rename the existing columns as the script needs them.
You can delete data from the individual account sheets if needed, but the script will re-populate it on the next run. The historical tabs (daily/weekly/trend) accumulate data over time.
Hourly is required. The script uses the current hour to determine which accounts to process based on their 'Run At' time (column C). Aim for 10-15 accounts per hour slot. If your accounts are large (lots of campaigns or placement data), reduce this to 2-3 accounts per slot to avoid the 30-minute timeout.
No. The script is specifically designed for hourly execution. Running it daily would mean all accounts try to process at once, causing timeouts.
Edit column C ('Run At') in the settings tab. Use values from 00-23 to set which hour each account updates. Distribute your accounts evenly across hours, keeping 10-15 accounts per slot for typical accounts, or 2-3 per slot for very large accounts.
No ongoing costs. Google Apps Script is free for Google Ads scripts (even at MCC level), there are no API costs (scripts use a different system than the Google Ads API), and Google Sheets storage is free up to 15GB. The script creates one master sheet plus one per account, but these are typically under 10MB each.
Copy the error message and paste it into Claude, ChatGPT, or your preferred AI assistant. Include context about what you were doing. AI can often diagnose and solve the problem immediately. If that doesn't help, check the Troubleshooting guide, then email mike@mikerhodes.com.au with the error details.
Check the error column (N) in the settings tab for that account's row. Common issues include invalid CID format, no PMax/Shopping/DG campaigns, or permission problems. The Troubleshooting guide has detailed solutions.
Timeout errors usually mean an account has a lot of data. The script will retry on the next hourly run. If it keeps failing, try spreading accounts across more time slots or reducing PLACEMENT_LIMIT in the advanced settings.
First, check the 'Last Successful Run' timestamp to ensure the account is actually updating. Then verify the date range (last 30 days) and timezone. Data differences from the UI are usually due to timezone or removed campaigns.
You can add calculated columns in the sheets, but you can't add new Google Ads metrics without modifying the script code. The script pulls specific fields via GAQL queries.
You can add columns or tabs to the individual account sheets, but don't rename or delete the existing structure as the script expects specific column positions.
Yes! Feel free to add additional tabs to the master sheet or individual account sheets for your own analysis. The script won't touch tabs it doesn't create.
Script updates may add new columns or tabs but won't remove your custom additions. However, if you modify the script code itself and something breaks, I won't be able to help troubleshoot your customized version. Keep customizations in separate tabs rather than modifying the script's output tabs.
New versions are announced via email to purchasers and in the Ads to AI community. Check the script version number at the top of the code (currently v94).
Replace the script code in Google Ads with the new version. Your sheet URL stays the same. However, some updates require sheet changes - always check the comments at the top of the new script for specific instructions. Major updates (like v94) may require creating new sheets.
Updating the script code doesn't affect your Google Sheets. Historical data is preserved. If an update requires a new sheet template, the script will create new sheets but your old data remains in the old sheets.
Usually no - just paste the new code and save. Check the comments at the top of the script for version-specific instructions. Some major updates may require copying a new template sheet.
If you didn't find what you're looking for, here are other resources: