{"id":23033674,"url":"https://github.com/chukhraiartur/seo-position-tracker-ruby","last_synced_at":"2025-08-05T10:19:23.081Z","repository":{"id":181083945,"uuid":"633828043","full_name":"chukhraiartur/seo-position-tracker-ruby","owner":"chukhraiartur","description":"A simple Ruby CLI and in-code SEO position tracking tool for Google and 5 other search engines.","archived":false,"fork":false,"pushed_at":"2023-07-14T02:28:07.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-08T22:19:27.489Z","etag":null,"topics":["bing","duckduckgo","google","naver","ranking","ruby","ruby-gem","ruby-lib","seo","serpapi","webscraping","yahoo"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chukhraiartur.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-28T11:24:07.000Z","updated_at":"2023-08-05T02:22:30.000Z","dependencies_parsed_at":"2025-01-11T22:29:12.200Z","dependency_job_id":"cdeac15c-9940-4795-b8e2-9088040f6745","html_url":"https://github.com/chukhraiartur/seo-position-tracker-ruby","commit_stats":null,"previous_names":["chukhraiartur/seo-position-tracker-ruby"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chukhraiartur%2Fseo-position-tracker-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chukhraiartur%2Fseo-position-tracker-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chukhraiartur%2Fseo-position-tracker-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chukhraiartur%2Fseo-position-tracker-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chukhraiartur","download_url":"https://codeload.github.com/chukhraiartur/seo-position-tracker-ruby/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246899659,"owners_count":20851898,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bing","duckduckgo","google","naver","ranking","ruby","ruby-gem","ruby-lib","seo","serpapi","webscraping","yahoo"],"created_at":"2024-12-15T16:17:25.593Z","updated_at":"2025-04-02T22:11:52.050Z","avatar_url":"https://github.com/chukhraiartur.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003cp\u003eSpecial thanks to:\u003c/p\u003e\n\u003cdiv\u003e\n   \u003cimg src=\"https://user-images.githubusercontent.com/81998012/231172985-81515e8b-bc41-46b4-83fa-d129d5f3e718.svg\" width=\"60\" alt=\"SerpApi\"\u003e\n\u003c/div\u003e\n\u003ca href=\"https://serpapi.com\"\u003e\n  \u003cb\u003eAPI to get search engine results with ease.\u003c/b\u003e\n\u003c/a\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003eRuby SEO Position Tracker\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003eA simple Ruby CLI and in-code SEO position tracking tool for Google and 5 other search engines.\u003c/p\u003e\n\nThis tool uses [SerpApi](https://serpapi.com/) as a tool to parse data from search engines. \n\nYou can use provided API key that will be available after installation, however, it's purely for testing purposes to see if the tool fits your needs. If you'll be using it for your own purpose (personal or commercial), you have to use [your own SerpApi key](https://serpapi.com/manage-api-key).\n\n\n\n## 🔎 Current search engines support\n\n- Google Search - first 100 organic results.\n- Bing Search - first 50 organic results.\n- DuckDuckGo Search - up to 30 organic results.\n- Yahoo! Search - first 10 organic results.\n- Yandex Search - up to 15 organic results.\n- Naver Search - first 15 organic results.\n\n\n## ⚙️Installation\n\n```bash\n$ gem install seo-position-tracker-ruby\n```\n\n\n## 🤹‍♂️Usage\n\n```bash\n$ seo -h\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\nAvailable arugments\n\u003c/summary\u003e\n\n```lang-none\nUsage: seo [options]\n    -q, --query QUERY                Search query. Default \"coffee\".\n    -k, --target-keywords KEYWORDS   Target keywords to track. Default \"coffee\".\n    -w, --target-websites WEBSITES   Target websites to track. Default \"starbucks.com\".\n    -e, --search-engine ENGINES      Choosing a search engine to track: \"google\", \"bing\", \"duckduckgo\", \"yahoo\", \"yandex\", \"naver\". You can select multiple search engines by separating them with a comma: google,bing. All search engines are selected by default.\n    -a, --api-key API_KEY            Your SerpApi API key: https://serpapi.com/manage-api-key. Default is a test API key to test CLI.\n    -l, --language LANGUAGE          Language of the search. Supported only for \"google\", \"yahoo\" and \"yandex\" engines. Default is nil.\n    -c, --country COUNTRY            Country of the search. Supported only for \"google\", \"bing\" and \"yahoo\" engines. Default is nil.\n    -p, --location LOCATION          Location of the search. Supported only for \"google\", \"bing\", \"duckduckgo\" and \"yandex\" engines. Default is nil.\n    -d, --domain DOMAIN              Search engine domain to use. Supported only for \"google\", \"yahoo\" and \"yandex\" engines. Default is nil.\n    -s, --save-to SAVE               Saves the results in the current directory in the selected format (CSV, JSON, TXT). Default CSV.\n```\n\n\u003c/details\u003e\n\n## 🤹‍♂️Examples\n\n#### Extracting positions from all search engines for a given query with a target website and a target keyword:\n\n```bash\n$ seo --api-key=\u003cyour_serpapi_api_key\u003e \\\n-q \"minecraft\" \\\n-k official \\\n-w minecraft.net\n```\n\n```json\n[\n  {\n    \"engine\": \"google\",\n    \"position\": 1,\n    \"title\": \"Welcome to the Minecraft Official Site | Minecraft\",\n    \"link\": \"https://www.minecraft.net/en-us\"\n  },\n  {\n    \"engine\": \"bing\",\n    \"position\": 1,\n    \"title\": \"Welcome to the Minecraft Official Site | Minecraft\",\n    \"link\": \"https://www.minecraft.net/\"\n  },\n  {\n    \"engine\": \"duckduckgo\",\n    \"position\": 1,\n    \"title\": \"Welcome to the Minecraft Official Site | Minecraft\",\n    \"link\": \"https://www.minecraft.net/\"\n  },\n  {\n    \"engine\": \"yahoo\",\n    \"position\": 1,\n    \"title\": \"Welcome to the Minecraft Official Site | Minecraft\",\n    \"link\": \"https://www.minecraft.net/\"\n  },\n  {\n    \"engine\": \"yandex\",\n    \"position\": 1,\n    \"title\": \"Welcome to the Minecraft Official Site | Minecraft\",\n    \"link\": \"https://www.minecraft.net/\"\n  }\n]\n```\n\n#### Extracting positions from 3 search engines with default arguments and saving to CSV:\n\n```bash\n$ seo --api-key=\u003cyour_serpapi_api_key\u003e \\\n-e google,bing,duckduckgo \\\n-s CSV\n```\n\n```json\n[\n  {\n    \"engine\": \"google\",\n    \"position\": 7,\n    \"title\": \"Starbucks Coffee Company\",\n    \"link\": \"https://www.starbucks.com/\"\n  },\n  {\n    \"engine\": \"bing\",\n    \"position\": 4,\n    \"title\": \"Starbucks Coffee Company\",\n    \"link\": \"https://www.starbucks.com/\"\n  },\n  {\n    \"engine\": \"bing\",\n    \"position\": 13,\n    \"title\": \"The Best Coffee from Starbucks Coffee: Starbucks Coffee Company\",\n    \"link\": \"https://www.starbucks.com/coffee/\"\n  },\n  {\n    \"engine\": \"duckduckgo\",\n    \"position\": 2,\n    \"title\": \"Starbucks Coffee Company\",\n    \"link\": \"https://www.starbucks.com/\"\n  },\n  {\n    \"engine\": \"duckduckgo\",\n    \"position\": 11,\n    \"title\": \"The Best Coffee from Starbucks Coffee: Starbucks Coffee Company\",\n    \"link\": \"https://www.starbucks.com/coffee/\"\n  }\n]\n```\n\n#### Extracting positions from one engine with all arguments for it:\n\n```bash       \n$ seo --api-key=\u003cyour_serpapi_api_key\u003e \\\n-q serpapi \\\n-k \"Google Search API\" \\\n-w \"https://serpapi.com/\" \\\n-e google \\\n-l de \\\n-c de \\\n--location Germany \\\n-d google.de \\\n-s txt\n```\n\n```json\n[\n  {\n    \"engine\": \"google\",\n    \"position\": 1,\n    \"title\": \"SerpApi: Google Search API\",\n    \"link\": \"https://serpapi.com/\"\n  }\n]\n```\n\n#### Extracting positions from all search engines manually (without CLI):\n\n```ruby\nrequire \"seo-position-tracker-ruby\"\n\ntracker = SeoPositionTracker::Scraper.new(\n    query='coffee', \n    api_key='\u003cyour_serpapi_api_key\u003e', \n    keywords=['coffee', 'starbucks'], \n    websites=['starbucks.com', 'wikipedia.org']\n)\n\nposition_data = []\n\ngoogle_results = tracker.scrape_google(lang='en', country='us', location='United States', domain='google.com')\nposition_data.concat(google_results)\n\nbing_results = tracker.scrape_bing(country='us', location='United States')\nposition_data.concat(bing_results)\n\nduckduckgo_results = tracker.scrape_duckduckgo(location='us-en')\nposition_data.concat(duckduckgo_results)\n\nyahoo_results = tracker.scrape_yahoo(lang='lang_en', country='us', domain='uk')\nposition_data.concat(yahoo_results)\n\nyandex_results = tracker.scrape_yandex(lang='en', domain='yandex.com')\nposition_data.concat(yandex_results)\n\nnaver_results = tracker.scrape_naver()\nposition_data.concat(naver_results)\n\ntracker.save_to_csv(position_data)\ntracker.save_to_json(position_data)\ntracker.save_to_txt(position_data)\n\ntracker.print(position_data)\n```\n\n## 💡Issues or suggestions\n\nVisit [issues](https://github.com/chukhraiartur/seo-position-tracker-ruby/issues) page.\n\n## 📜 Licence\n\nRuby SEO Position Tracker is released under the [BSD-3-Clause Licence](https://github.com/chukhraiartur/seo-position-tracker-ruby/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchukhraiartur%2Fseo-position-tracker-ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchukhraiartur%2Fseo-position-tracker-ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchukhraiartur%2Fseo-position-tracker-ruby/lists"}