Nameserver Management Scripts
Bulk Nameserver Updater
Update nameservers for multiple domains across different registrars (Moniker, eNom).
Prerequisites
- Node.js installed
- Environment variables configured (see .env file):
- MONIKER_USER_KEY and MONIKER_API_PASSWORD for Moniker
- ENOM_UID and ENOM_PASSWORD for eNom
- CLOUDFLARE_API_TOKEN for Cloudflare
Usage
Update single domain to Cloudflare nameservers
node scripts/bulk-update-nameservers.js \
--registrar moniker \
--domain example.com \
--cloudflare
Update multiple domains from a file
node scripts/bulk-update-nameservers.js \
--registrar enom \
--file scripts/domains.json \
--cloudflare
Update to custom nameservers
node scripts/bulk-update-nameservers.js \
--registrar moniker \
--file scripts/domains.txt \
--nameservers "ns1.example.com,ns2.example.com"
Dry run (test without making changes)
node scripts/bulk-update-nameservers.js \
--registrar moniker \
--domain example.com \
--cloudflare \
--dry-run
Options
| Option | Description | Required |
| --registrar <name> | Registrar API to use (moniker or enom) | Yes |
| --domain <domain> | Single domain to update | One of --domain or --file |
| --file <path> | File with list of domains | One of --domain or --file |
| --nameservers <ns> | Comma-separated list of nameservers | One of --nameservers or --cloudflare |
| --cloudflare | Use Cloudflare nameservers (auto-fetches from API) | One of --nameservers or --cloudflare |
| --dry-run | Test mode - show what would be updated without making changes | No |
| --delay <ms> | Delay between API calls in milliseconds (default: 1000) | No |
File Formats
JSON Format (domains.json)
[
"domain1.com",
"domain2.com",
"domain3.com"
]
Or with object wrapper:
{
"domains": [
"domain1.com",
"domain2.com"
]
}
Text Format (domains.txt)
domain1.com
domain2.com
domain3.com
# Comments start with #
How It Works
- Domain Loading: Loads domains from file or command line
- Cloudflare Setup (if --cloudflare flag used):
- Checks if Cloudflare zone exists for domain
- Creates zone if it doesn't exist
- Extracts Cloudflare nameservers from zone
- Nameserver Update:
- Calls the appropriate registrar API (Moniker or eNom)
- Updates domain nameservers
- Waits between requests to avoid rate limiting
- Results: Saves results to JSON file with timestamp
Output
The script will:
- Show progress for each domain
- Display success/failure status
- Save detailed results to nameserver-update-results-<timestamp>.json
- Print summary at the end
Example output:
============================================================
Processing: example.com
============================================================
[Cloudflare] Checking if zone exists for example.com...
[Cloudflare] Zone ID: abc123xyz
[Cloudflare] Nameservers: ns1.cloudflare.com, ns2.cloudflare.com
[Moniker] Updating nameservers...
✅ Success!
Updated nameservers: ["ns1.cloudflare.com", "ns2.cloudflare.com"]
============================================================
SUMMARY
============================================================
Total domains: 3
✅ Successful: 3
❌ Failed: 0
Results saved to: nameserver-update-results-2026-03-03T03-30-00.json
Error Handling
- API errors are caught and logged
- Failed domains don't stop the script
- All results are saved even if some domains fail
- Exit code 1 if any domains failed, 0 if all successful
Rate Limiting
Use --delay <ms> to add delays between API requests:
node scripts/bulk-update-nameservers.js \
--registrar moniker \
--file domains.json \
--cloudflare \
--delay 2000
Default delay is 1000ms (1 second).
Examples
Scenario 1: 32 Moniker domains need Cloudflare nameservers
- Create domains file:
echo '["domain1.com", "domain2.com", ...]' > moniker-domains.json
- Test with dry run:
node scripts/bulk-update-nameservers.js \
--registrar moniker \
--file moniker-domains.json \
--cloudflare \
--dry-run
- Run for real:
node scripts/bulk-update-nameservers.js \
--registrar moniker \
--file moniker-domains.json \
--cloudflare
Scenario 2: Update single test domain
node scripts/bulk-update-nameservers.js \
--registrar moniker \
--domain test-domain.com \
--cloudflare
Scenario 3: Custom nameservers
node scripts/bulk-update-nameservers.js \
--registrar enom \
--file domains.txt \
--nameservers "ns1.myhost.com,ns2.myhost.com"
Troubleshooting
"Unsupported registrar" error
- Make sure you're using moniker or enom (lowercase)
API authentication errors
- Check your .env file has the correct credentials
- Verify environment variables are loaded
"Failed to get Cloudflare nameservers"
- Check CLOUDFLARE_API_TOKEN is configured
- Verify token has permissions to create zones
Rate limiting errors
- Increase --delay value
- Run smaller batches of domains
Production Use
Before running on production domains:
- ✅ Test with --dry-run first
- ✅ Test on 1-2 domains without --dry-run
- ✅ Verify nameservers were updated at registrar
- ✅ Run full batch with appropriate delay
Support
For issues or questions, check: