Pi-Hole - Adding blocklist urls to the Gravity DB from the command-line

This is to add block list to the Gravity DB from the command line from a text file.

You will need a few things to do this

This is for allowing zmodem options if you telnet session allows it like SecurCRT that I used.

Install the following packages

sudo apt-get install lrzsz
sudo apt-get install sqlite3

Add the URL's per line for example

Blocklist: HERE

To add these URL's you have to add them to the following file

sudo nano /etc/pihole/adlists.list

Create a file to run as the import script

sudo nano /etc/pihole/adlists.sh

Then create a script and call it what ever you like and put this in

#!/bin/bash
set -e

DB_FILE="/etc/pihole/gravity.db"
BACKUP_FILE="/etc/pihole/gravity_backup_$(date +%Y%m%d_%H%M%S).db"
ADLIST_FILE="/etc/pihole/adlists.list"

# Check if adlists.list exists
if [ ! -f "$ADLIST_FILE" ]; then
    echo "Error: $ADLIST_FILE not found!"
    exit 1
fi

echo "1. Backing up existing gravity.db..."
sudo cp "$DB_FILE" "$BACKUP_FILE"

echo "2. Clearing existing adlists from database..."
sudo sqlite3 "$DB_FILE" "DELETE FROM adlist;"

echo "3. Importing HTTPS URLs from $ADLIST_FILE..."
count=0

# Process lines using process substitution to keep scope in the main shell
while IFS= read -r url; do
    if [ -n "$url" ]; then
        safe_url=$(echo "$url" | sed "s/'/''/g")
        sudo sqlite3 "$DB_FILE" "INSERT INTO adlist (address, enabled, comment) VALUES ('$safe_url', 1, 'Imported from adlists.list');"
        count=$((count + 1))
        echo "Added: $safe_url"
    fi
done < <(grep 'https://' "$ADLIST_FILE" | grep -v '^[[:space:]]*#' | grep -o 'https://[^[:space:]]*')

echo "Successfully imported $count adlists."

echo "4. Updating Gravity (downloading lists)..."
sudo pihole -g

echo "Done! Pi-hole gravity update complete."

Change the permissions on the file

sudo chmod +x /etc/pihole/adlists.sh

Docker Users

If you place the script within the working directory of pihole container you can do the following:

docker exec -it pihole chmod +x /etc/pihole/bash_script.sh
docker exec -it pihole chmod 777 /etc/pihole/adlists.list
docker exec -it pihole ./etc/pihole/bash_script.sh

Error Check

Run the following to make sure your database is still okay and does not display any errors like these

2025-03-25 21:53:21.039 EDT [1353/T9050] ERROR: SQLite3: no such table: info in "SELECT value FROM info WHERE property = 'updated';" (1) 2025-03-25 21:53:21.039 EDT [1353/T9050] WARNING: gravity_updated(): SELECT value FROM info WHERE property = 'updated'; - SQL error prepare: SQL logic error

If so just rebuild the database like this

sudo mv /etc/pihole/gravity.db /etc/pihole/gravity_backup.db
sudo pihole -g


Revision #8
Created 24 June 2025 12:29:40 by Steve Ling
Updated 12 August 2026 01:30:22 by Steve Ling