Skip to content

Instantly share code, notes, and snippets.

Created February 20, 2016 17:21
Show Gist options
  • Save cyrusboadway/5a7b715665f33c237996 to your computer and use it in GitHub Desktop.
Save cyrusboadway/5a7b715665f33c237996 to your computer and use it in GitHub Desktop.
Script to update a Google Domains DNS record
### Google Domains provides an API to update a DNS "Syntheitc record". This script
### updates a record with the script-runner's public IP, as resolved using a DNS
### lookup.
### Google Dynamic DNS:
### Synthetic Records:
# Resolve current public IP
IP=$( dig +short )
# Update Google DNS Record
curl -s $URL
Copy link

You can also use Google Domains to get your public IP address.
IP=$(curl -s "")

In my Gist, I fetch the current record Google has, and compare it to my public IP before trying to submit an update. I also examine the response and echo out a more detailed status update.

Copy link

ghzgod commented Mar 16, 2019

How do I use this if I have more than 1 subdomain?

Copy link

raceybe commented Jun 19, 2019

For the record, all of this is based on the Dyn API developed in the 90s and most vendors support it for dynamic updates. You can check for details here:

Copy link

Should it work the same way if my agent has a n IPv6 address? Because it doesn't seem to work for me.

Copy link

The documentation suggests the API supports IPv6 updates.

You may need to modify the script to url-encode the ip address (the colons in particular). Rather than composing the Url as a single string, you could add the data parameters component through curl's method, which will do the encoding:

curl --data-urlencode "myip=${IP}"

Copy link

Thanks for the quick response.
The .sh script works and returns "good 'my IPv6 address'".
However my domain only works if I am connected in the same network as the server. But is a type my IPv4 address in a browser on a device that is not in the same network it actually works.

I don't know what's the problem.

Copy link

n0v1c3 commented Sep 9, 2019


This will make it IP4
IP=$( curl -4s "" )

Bonus! Clean output
curl -sw '\n' $URL

Copy link

wluo commented Oct 5, 2019

I think it would be slightly more secure to do this so your username and password are not in plain text (url) provided you're making an HTTPS request:
curl --user ${USERNAME}:${PASSWORD} -s $URL

Copy link

rafex commented Oct 23, 2019

I did something similar with python, avoiding calls from google domains. Today I have the script running every 5 minutes.

Copy link

jaddriggers commented Dec 20, 2019

I'm getting badagent when trying to run in macosx terminal
Nevermind fixed it. Changed to use Google domains to get IP

Copy link

rip057 commented Feb 10, 2020

only posting here because i was drawn in by the search engine... never transmit your username and password in anything but TLS and proper TLS... dont be a fool its not worth it in the end.
you can use this for ip address retrieval

currentipaddress="$(wget -q -O - | sed -e 's/.Current IP Address: //' -e 's/<.$//')"

or you can use this if you are directly connected... change to your correct network interface though

currentipaddress="$(ifconfig eth1 | grep -o "inet addr:([0-9]{1,3}.){3}[0-9]{1,3}" | sed 's/inet addr://')"

and this is the curl request that i have formed and it works perfectly everytime.

curloutput=$(curl -s --data-urlencode "" --data-urlencode "myip=$currentipaddress" -H "Host:" -u "$username:$password" "")

echo "$curloutput" to wherever you want

Copy link

AdamKearn commented May 20, 2020

I know this is an old thread but you can just send a request to the URL and not include the IP just pass the username and password.
The API will then use the IP the request was sent from.


For more details see the section at the bottom of this page labelled "Using the API to update your Dynamic DNS record"

Copy link

ghost commented Dec 8, 2020

I had to change line 15 to IP=$( curl ). Other than that the script works.

Copy link

A stare is born

Copy link

Does anyone know if there is an update to this to work with Squarespace since Google Domains has retired?

Copy link

Squarespace does not offer an API for DNS configuration. There is no practical mechanism to programmatically manage dynamic DNS records for domains they manage.

Copy link

AdamKearn commented Jun 18, 2024 via email

Copy link

cyrusboadway commented Jun 18, 2024

Squarespace has a registrar & DNS business, independent of their hosting services:

Squarespace purchased all Google Domains registrations:

Any users whose domain registrations were transferred with the purchase would need to find a new registrar if they want a DDNS API.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment