A simple Python CLI and in-code SEO position tracking tool for Google and 6 other search engines.
This project uses SerpApi
- Google Search - first 100 organic results.
- Baidu Search - first 50 organic results.
- Bing Search - first 50 organic results.
- DuckDuckGo Search - up to 30 organic results.
- Yahoo! Search - first 10 organic results.
- Yandex Search - up to 15 organic results.
- Naver Search - first 15 organic results.
$ pip install seo-position-tracker
Install from source:
Windows:
$ git clone https://github.com/dimitryzub/seo-position-tracking.git
$ cd seo-position-tracker/
$ python -m venv env
$ env/Scripts/activate
$ pip install poetry
$ poetry install
If you get an error
$ pip install chardet
$ poetry install
$ seo -h
Available arugments
SerpApi SEO position tracker [-h] [-q] [-tk [...]] [-tw [...]] [-se [...]] [-ak] [-hl] [-gl] [-loc] [-d] [-st]
A simple Python CLI for SEO position tracking from Google, Baidu, Bing, DuckDuckGo, Yahoo, Yandex and Naver.
optional arguments:
-h, --help show this help message and exit
-q , --query Search query. Default "coffee".
-tk [ ...], --target-keywords [ ...]
Target keywords to track. Default "['coffee']".
-tw [ ...], --target-websites [ ...]
Target websites to track. Default "['starbucks.com']".
-se [ ...], --search-engine [ ...]
Choosing a search engine to track: "google", "baidu", "bing", "duckduckgo", "yahoo", "yandex", "naver". You can select multiple search engines. All search
engines are selected by default.
-ak , --api-key Your SerpApi API key: https://serpapi.com/manage-api-key. Default is a test API key to test CLI.
-hl , --lang Language of the search. Supported only for "google", "baidu", "yahoo" and "yandex" engines. Default "None". Find more by Googling: "SerpApi supported
<engine> languages"
-gl , --country Country of the search. Supported only for "google", "bing" and "yahoo" engines. Default "None". Find more by Googling: "SerpApi supported <engine>
countries"
-loc , --location Location of the search. Supported only for "google", "bing", "duckduckgo" and "yandex" engines. Default "None". Find more by Googling: "SerpApi supported
<engine> locations"
-d , --domain Search engine domain to use. Supported only for "google", "yahoo" and "yandex" engines. Default "None". Find more by Googling: "SerpApi supported <engine>
domains"
-st , --save-to Saves the results in the current directory in the selected format (CSV, JSON, TXT). Default CSV.
Found a bug? Open issue: https://github.com/dimitryzub/seo-position-tracker/issues
Extracting positions from all search engines for a given query with a target website and a target keyword:
$ seo --api-key=<your_serpapi_api_key> \
-q "minecraft" \
-tk official \
-tw minecraft.net
[
{
"engine": "google",
"position": 1,
"title": "Welcome to the Minecraft Official Site | Minecraft",
"link": "https://www.minecraft.net/en-us"
},
{
"engine": "bing",
"position": 1,
"title": "Minecraft - Official Site",
"link": "https://minecraft.net/"
},
{
"engine": "bing",
"position": 2,
"title": "Welcome to the Minecraft Official Site | Minecraft",
"link": "https://www.minecraft.net/en-us"
},
{
"engine": "bing",
"position": 10,
"title": "Minecraft Official Site | Minecraft Education",
"link": "https://education.minecraft.net/en-us"
},
{
"engine": "duckduckgo",
"position": 1,
"title": "Minecraft - Official Site",
"link": "https://minecraft.net/"
},
{
"engine": "duckduckgo",
"position": 2,
"title": "Welcome to the Minecraft Official Site | Minecraft",
"link": "https://www.minecraft.net/en-us"
},
{
"engine": "yahoo",
"position": 1,
"title": "Minecraft - Official Site",
"link": "https://minecraft.net/"
},
{
"engine": "yahoo",
"position": 2,
"title": "Welcome to the Minecraft Official Site | Minecraft",
"link": "https://www.minecraft.net/en-us"
},
{
"engine": "yandex",
"position": 2,
"title": "Welcome to the Minecraft Official Site | Minecraft",
"link": "https://www.minecraft.net/"
}
]
$ seo --api-key=<your_serpapi_api_key> \
-se google bing duckduckgo \
-st JSON
[
{
"engine": "google",
"position": 6,
"title": "Starbucks Coffee Company",
"link": "https://www.starbucks.com/"
},
{
"engine": "bing",
"position": 12,
"title": "The Best Coffee from Starbucks Coffee: Starbucks Coffee Company",
"link": "https://www.starbucks.com/coffee/"
},
{
"engine": "duckduckgo",
"position": 11,
"title": "The Best Coffee from Starbucks Coffee: Starbucks Coffee Company",
"link": "https://www.starbucks.com/coffee/"
}
]
$ seo --api-key=<your_serpapi_api_key> \
-q serpapi \
-tk serpapi \
-tw https://serpapi.com/ https://github.com/ \
-se google \
-hl de \
-gl de \
-loc Germany \
-d google.de \
-st TXT
[
{
"engine": "google",
"position": 1,
"title": "SerpApi: Google Search API",
"link": "https://serpapi.com/"
},
{
"engine": "google",
"position": 3,
"title": "SerpApi - GitHub",
"link": "https://github.com/serpapi"
}
]
from seo_position_tracker.seo_position_tracker import SeoPositionTracker
import json
tracker = SeoPositionTracker(
query='coffee',
api_key='<your_serpapi_api_key>',
keywords=['coffee', 'starbucks'],
websites=['starbucks.com']
)
position_data = []
google_results = tracker.scrape_google(lang='en', country='us', location='United States', domain='google.com')
position_data.extend(google_results)
baidu_results = tracker.scrape_baidu(lang='1')
position_data.extend(baidu_results)
bing_results = tracker.scrape_bing(country='us', location='United States')
position_data.extend(bing_results)
duckduckgo_results = tracker.scrape_duckduckgo(location='us-en')
position_data.extend(duckduckgo_results)
yahoo_results = tracker.scrape_yahoo(lang='lang_en', country='us', domain='uk')
position_data.extend(yahoo_results)
yandex_results = tracker.scrape_yandex(lang='en', domain='yandex.com')
position_data.extend(yandex_results)
naver_results = tracker.scrape_naver()
position_data.extend(naver_results)
print(json.dumps(position_data, indent=2, ensure_ascii=False))
Visit issues page.
SEO Position Tracker is released under the BSD-3-Clause Licence.