Automatically remove trademark symbols (℠, ™, ®, ©) and other special characters from your Google Ads Responsive Search Ads and Performance Max campaigns.
When trademark requirements change or you need to clean up ad copy across large accounts, manually editing hundreds or thousands of ads is time-consuming and error-prone. This script automates the process while preserving all other ad settings.
- ✅ Removes configurable symbols from ad text
- ✅ Supports Responsive Search Ads (RSA)
- ✅ Supports Performance Max ad assets
- ✅ Processes both active and paused ads
- ✅ Preserves URLs, paths, and all other settings
- ✅ Automatic spacing cleanup after removal
- ✅ Detailed logging with found vs. updated counts
- ✅ Safe approach: creates new ads, pauses old ones
- ✅ Comprehensive error handling
- Log into your Google Ads account
- Navigate to Tools & Settings > Bulk Actions > Scripts
- Click the + button to create a new script
- Copy the contents of
symbol-remover.js - Paste into the script editor
- Save with a descriptive name (e.g., "Remove Trademark Symbols")
Edit the SYMBOLS_TO_REMOVE array at the top of the script:
var SYMBOLS_TO_REMOVE = ['℠', '™', '®', '©'];Common symbols you might want to remove:
℠- Service mark™- Trademark®- Registered trademark©- Copyright•- Bullet point★- Star†- Dagger‡- Double dagger§- Section sign
- Preview First: Click "Preview" to see what will change without making actual changes
- Review Logs: Check the log output to see how many ads will be affected
- Run Script: Click "Run" to execute the changes
- Review Results: Check the execution summary in the logs
Starting ad text update...
Target: Remove symbols: ℠, ™, ®, ©
Ad Types: RSA & Performance Max
-------------------------------------------
Processing Responsive Search Ads...
✓ Updated RSA in Ad Group: Brand - Exact Match
✓ Updated RSA in Ad Group: Services - General
Processing Performance Max Assets...
Checking PMax Campaign: Performance Max - All Products
✓ Updated Asset Group: Default Asset Group
===========================================
EXECUTION SUMMARY
===========================================
Symbols Removed: ℠, ™, ®, ©
Responsive Search Ads:
- Ads with symbols found: 47
- Ads updated: 47
Performance Max Ads:
- Ads with symbols found: 12
- Ads updated: 12
Total Ads Updated: 59
- Scans all RSAs (active and paused) for target symbols
- Creates new ads with cleaned text
- Pauses original ads (keeps them for reference)
- Preserves all settings: URLs, mobile URLs, path fields
- Scans all asset groups for target symbols in:
- Headlines
- Long headlines
- Descriptions
- Adds cleaned versions of text assets
- Removes old assets with symbols
- Preserves all other asset group settings
- Removes all specified symbols
- Collapses multiple spaces into single space
- Trims leading and trailing whitespace
- Example:
"Children's Health℠ "→"Children's Health"
- Test on one account first before deploying MCC-wide
- Use Preview mode to see changes without executing
- Review the logs to understand what will change
- Review paused ads to ensure changes are correct
- Delete old paused ads manually once you've verified the new ones
- Monitor performance of new ads for 1-2 weeks
- Does not process legacy Expanded Text Ads (ETAs)
- Creates new ads rather than editing in place
- Old ads are paused, not deleted (manual cleanup required)
Remove trademark symbols when legal requirements change or when trademark registrations expire.
var SYMBOLS_TO_REMOVE = ['℠', '™', '®'];Clean up ads to match new brand guidelines that prohibit special characters.
var SYMBOLS_TO_REMOVE = ['℠', '™', '®', '©', '•', '★'];Remove symbols to free up character space for additional messaging.
var SYMBOLS_TO_REMOVE = ['℠', '™', '®', '©', '†', '‡'];- Start Small: Test on a single campaign or account first
- Document Changes: Keep a log of which symbols were removed and when
- Monitor Performance: Track CTR and conversion changes after deployment
- Keep Old Ads: Don't delete paused ads immediately - wait 30 days
- Run Off-Hours: Schedule during low-traffic periods to minimize disruption
- Check that campaigns/ad groups are enabled or paused (not removed)
- Verify symbols are in the
SYMBOLS_TO_REMOVEarray - Ensure you have edit permissions
- Reduce batch size by running on specific campaigns first
- Use MCC-level scripts to distribute load across accounts
- The script automatically handles spacing cleanup
- If issues persist, check for non-standard space characters
This script was developed for enterprise-scale Google Ads management. Contributions and improvements are welcome!
- Fork the repository
- Create a feature branch
- Test thoroughly on real accounts
- Submit a pull request with detailed explanation
- Initial release
- RSA and Performance Max support
- Configurable symbol removal
- Automatic spacing cleanup
- Comprehensive logging
John - Senior Paid Media Specialist
15+ years managing large-scale advertising campaigns
Specializing in automation and AI-powered paid media optimization
MIT License - Feel free to use and modify for your needs
Looking for more Google Ads automation? Check out:
- Search query optimization tools
- Automated RSA generation
- Budget pacing dashboards
- Creative performance analyzers
Questions or Issues? Open an issue in this repository or connect with me on LinkedIn.
Found this helpful? Star the repo and share with other paid media professionals!
**3. LICENSE**
MIT License
Copyright (c) 2025 John
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**4. .gitignore**
logs .log npm-debug.log yarn-debug.log* yarn-error.log*
.vscode/ .idea/ *.swp *.swo *~ .DS_Store
test/ *.test.js
.env .env.local