Cloudflare Docs
Support
Support
Visit Support on GitHub
Set theme to dark (⇧+D)

Adding Multiple Sites to Cloudflare via Automation

​​ Overview

If you need to add multiple sites (10+) to Cloudflare at once, you can do so via the Cloudflare API. Adding multiple sites can be useful when you:

  • Have multiple domains mapping back to a single, canonical domain - e.g. domains in different countries (.com.au, .co.uk, etc) that you want to have protected by Cloudflare
  • Are an agency or IT consultancy, and manage multiple domains on behalf of your customers (note: you should consider the Cloudflare Partner program)
  • You’re moving an existing set of sites over to Cloudflare

Using the API will allow you to add multiple sites quickly & efficiently, especially if you are already familiar with how to change your name-servers or add a DNS record.


​​ Prerequisites

To add multiple sites to Cloudflare via Automation, you’ll need:


​​ Add domains via the API

Cloudflare has a fully featured API ( documentation) that allows you to automate the creation of new domains, as well as configure DNS records, Page Rules and our many security settings. We’ll be using this API to automate adding multiple domains at once.

Open your terminal application (e.g. Terminal, or Terminal.app) and set your API key & email:

$ export CF_API_EMAIL=you@example.comexport CF_API_KEY=abc123def456ghi789

Then, we’ll write a simple for-loop that takes each domain name 

$ for domain in $(cat domains.txt); do \ curl -X POST -H "X-Auth-Key: $CF_API_KEY" -H "X-Auth-Email: $CF_API_EMAIL" \ -H "Content-Type: application/json" \ "https://api.cloudflare.com/client/v4/zones" \ --data '{"account": {"id": "id_of_that_account"}, "name":"'$domain'","jump_start":true}'; done

The “jump_start” key will have Cloudflare automatically attempt to scan for common DNS records—e.g. “www”, “mail”, “blog” and many others—so that you don’t have to configure them by hand (you should still confirm we found them all).  id_of_that_account is found on the Cloudflare Overview app under Account ID.

The API will return a response, including the  nameservers you’ll need to change at your registrar (where you registered the domain).

{ "result": { "id": "abc123def456ghi789", "name": "example.com", "status": "pending", "paused": false, "type": "full", "development_mode": 0, "name_servers": [ "chad.ns.cloudflare.com", "lucy.ns.cloudflare.com" ], "original_name_servers": [ "ns-cloud-e1.googledomains.com", "ns-cloud-e2.googledomains.com", "ns-cloud-e3.googledomains.com", "ns-cloud-e4.googledomains.com" ], "original_registrar": null, "original_dnshost": null, "modified_on": "2018-02-12T01:42:13.827149Z", "created_on": "2018-02-12T01:42:13.827149Z", "meta": { "step": 4, "wildcard_proxiable": false, "custom_certificate_quota": 0, "page_rule_quota": 3, "phishing_detected": false, "multiple_railguns_allowed": false }, "owner": { "id": "abc123def456ghi789", "type": "user", "email": "you@example.com" }, "account": { "id": "abc123def456ghi789", "name": "you@example.com" }, "permissions": [ "#access:edit", "#access:read", "#analytics:read", "#app:edit", "#billing:edit", "#billing:read", "#cache_purge:edit", "#dns_records:edit", "#dns_records:read", "#lb:edit", "#lb:read", "#logs:read", "#member:edit", "#member:read", "#organization:edit", "#organization:read", "#ssl:edit", "#ssl:read", "#subscription:edit", "#subscription:read", "#waf:edit", "#waf:read", "#worker:edit", "#worker:read", "#zone:edit", "#zone:read", "#zone_settings:edit", "#zone_settings:read" ], "plan": { "id": "0feeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "name": "Free Website", "price": 0, "currency": "USD", "frequency": "", "is_subscribed": true, "can_subscribe": false, "legacy_id": "free", "legacy_discount": false, "externally_managed": false } }, "success": true, "errors": [], "messages": []}

Note the “name_servers” key in the response. These will be the same unique pair for all sites you add under your account - e.g.

"name_servers": [
"chad.ns.cloudflare.com",
"lucy.ns.cloudflare.com"
]

Copy your values (not the ones above!) and  update the nameservers at your registrar.


​​ Add domains via flarectl (Cloudflare’s CLI tool)

You can also add domains using flarectl, Cloudflare’s official CLI. You can  download a pre-built package for your operating system (Windows, macOS/Darwin, Linux) and create domains using it.

You’ll need to set your API credentials first:

$ export CF_API_EMAIL=you@example.comexport CF_API_KEY=abc123def456ghi789

… and then run the following command in flarectl:

$ for domain in $(cat domains.txt); do flarectl zone create --zone=$domain --jumpstart=false; done

After this, you can get the name-servers for each domain via “flarectl zone list”:

$ for domain in $(cat domains.txt); do flarectl zone info --zone=$domain; done

Search for help or tips within the  Cloudflare Community.


​​ Common issues

If any errors were returned in this process, the domain may not be registered (or only just registered), be a subdomain, or otherwise been invalid. The following articles cover the most common cases: