Demand Miner Tool is a private Google Ads Search campaign planning utility for the applicant's own Google Ads account. It converts campaign seed concepts into candidate Search campaign themes, ad group keyword sets, negative keyword candidates, geo/language targeting assumptions, CPC range assumptions, and local campaign build sheets for manual campaign creation in the Google Ads UI.
This project is maintained by an individual developer for internal use only. It is not an agency platform, SaaS product, public keyword database, search-results scraping tool, affiliate tool, or third-party advertising management service.
The tool is designed to support the planning stage before a Google Ads Search campaign is manually created.
Internal workflow:
- Enter campaign seed concepts for the applicant's own projects.
- Retrieve keyword ideas and historical keyword metrics from allowlisted Google Ads API keyword planning services.
- Review search demand, monthly trend, competition, bid ranges, and close variants.
- Mark keyword themes as prioritize, hold, reject, or needs more research.
- Export a local campaign build sheet for manual review.
- If advertising proceeds, create and manage the campaign manually in the Google Ads UI.
The tool does not create, edit, pause, remove, or otherwise mutate campaigns, ad groups, ads, keywords, budgets, bids, billing settings, users, or account structure.
The initial implementation is read-only and limited to keyword planning and minimal account-selection reads.
Allowlisted services:
KeywordPlanIdeaService.GenerateKeywordIdeas- expands Search campaign seed concepts into keyword ideas;
- uses language, geo target, and network settings selected by the internal user.
KeywordPlanIdeaService.GenerateKeywordHistoricalMetrics- retrieves historical metrics for reviewed candidate keywords;
- returns average monthly searches, monthly search volume trend, competition, competition index, bid estimates, average CPC when available, and close variants.
CustomerService.ListAccessibleCustomers- identifies accessible Google Ads accounts for account selection.
GoogleAdsService.SearchorGoogleAdsService.SearchStream- used only for narrow account-selection reads when required, such as customer ID, descriptive name, currency, and time zone.
Estimated normal use is 5-20 planning runs per day, usually two
KeywordPlanIdeaService calls per run. The private implementation is expected
to use request deduplication, local caching, exponential backoff, and local
operation caps.
The initial implementation will not use:
- campaign, ad group, ad, keyword, bid, or budget mutate operations;
- billing, payment, invoice, or account-budget operations;
- user access or invitation management;
- Customer Match, remarketing, conversion upload, or user data upload functionality;
RecommendationService.ApplyRecommendationorRecommendationService.DismissRecommendation;BatchJobService;- third-party account management;
- public API access or resale access;
- Google Search result scraping.
The planned output is a local campaign build sheet for internal review.
Example fields:
campaign_typecampaign_themead_group_themesource_seedkeyword_textclose_variantsmatch_type_hypothesisnegative_keyword_candidategeo_target_constantlanguage_constantavg_monthly_searchesmonthly_search_volumescompetitioncompetition_indexlow_top_of_page_bid_microshigh_top_of_page_bid_microsavg_cpc_microsbudget_hypothesislanding_page_readinessmanual_google_ads_ui_actionreview_statusnotes
Outputs are local planning artifacts. They are not published, sold, sublicensed, or redistributed.
This public repository does not contain API keys, OAuth client secrets, refresh tokens, developer tokens, raw exports, customer data, or private planning outputs.
The private implementation is expected to use a single-user OAuth desktop flow for the applicant's own Google Ads account. Refresh tokens and other credentials are stored outside the repository, preferably in macOS Keychain or an encrypted local credential store. Local credential files, if any are used, should be restricted to the local user account.
The repository excludes generated outputs, token caches, local databases,
credential files, and raw API responses through .gitignore.
This public repository is a lightweight public overview and minimal CLI scaffold for the private internal planning tool. It documents the intended Google Ads API scope and safety boundaries. The working implementation is expected to proceed after the appropriate Google Ads API access level is approved.
python main.py --help
python main.py --json- Owner/operator: Individual / Nine-Shell.
- Users: internal user only.
- Account scope: Google Ads accounts owned or controlled by the applicant.
- Initial campaign type: Search.
- Initial targeting context: Japan and Japanese-language campaign planning.
- External clients: none.
- Public users: none.
- Campaign mutation: none.
MIT License.