Skip to content
Python Search Keyword Generator
Search Keyword Generation Tool
- Used to create a search engine marketing campaign taxonomy
- Can be easily repurposed by updating the 'words' and 'products' dataframes
# List of words to pair with products
words = ('purchase', 'buy', '2023', 'shop', 'tickets', 'weekend')
print(words)
products = ['nascar', 'nascar cup series', 'cup series', 'xfinity series']
# Create an empty list
keywords_list = []
# Loop through products
for product in products:
# Loop through words
for word in words:
# Append combinations
keywords_list.append([product, product + ' ' + word])
keywords_list.append([product, word + ' ' + product])
# Inspect keyword list
from pprint import pprint
pprint(keywords_list)
# Load library
import pandas as pd
# Create a DataFrame from list
keywords_df = pd.DataFrame.from_records(keywords_list)
# Print the keywords DataFrame to explore it
keywords_df.head()
# Rename the columns of the DataFrame
keywords_df = keywords_df.rename(columns={0:'Ad Group', 1:'Keyword'})
keywords_df
# Add a campaign column
keywords_df['Campaign']='NASCAR Tickets'
keywords_df
# Add a criterion type column
keywords_df['Criterion Type']='Exact'
# Make a copy of the keywords DataFrame
keywords_phrase = keywords_df.copy()
# Change criterion type match to phrase
keywords_phrase['Criterion Type']='Phrase'
# Append the DataFrames
keywords_df_final = keywords_df.append(keywords_phrase)
keywords_df_final
# Save the final keywords to a CSV file
keywords_df_final.to_csv('keywords.csv',index=False)
# View a summary of our campaign work
summary = keywords_df_final.groupby(['Ad Group', 'Criterion Type'])['Keyword'].count()
print(summary)
import pandas as pd
# Read the CSV file into a DataFrame
ironworks_leads = pd.read_csv('./leads-20231227-20433-wbupz6.csv')
# Convert the 'created' column to datetime format
ironworks_leads['created'] = pd.to_datetime(ironworks_leads['created'])
# Create a new DataFrame with records created on or after 09/01/2023
ironworks_leads_last_90 = ironworks_leads[ironworks_leads['created'] >= '2023-09-01']
ironworks_leads_last_90
DataFrameas
df3
variable
SELECT
COUNT(*)
FROM ironworks_leads_last_90;
DataFrameas
df
variable
WITH leads_by_campaign_input_20 AS(
SELECT
DISTINCT(campaign) AS campaign_name,
COUNT(lead_id) AS total_leads
FROM
ironworks_leads_last_90
WHERE payload LIKE '%input_20%'
GROUP BY campaign
ORDER BY total_leads DESC
),
leads_by_campaign_no_input_20 AS(
SELECT
DISTINCT(campaign) AS campaign_name,
COUNT(lead_id) AS total_leads
FROM
ironworks_leads_last_90
WHERE payload NOT LIKE '%input_20%'
GROUP BY campaign
ORDER BY total_leads DESC
)
SELECT
input_20.campaign_name,
SUM(input_20.total_leads) AS leads_with_input_20,
SUM(no_input_20.total_leads) AS leads_with_no_input_20,
CONCAT(ROUND((SUM(no_input_20.total_leads) / (SUM(no_input_20.total_leads) + SUM(input_20.total_leads))) * 100, 2), '%') AS pct_no_input_20
FROM leads_by_campaign_input_20 AS input_20
JOIN leads_by_campaign_no_input_20 AS no_input_20
ON input_20.campaign_name = no_input_20.campaign_name
GROUP BY input_20.campaign_name
ORDER by leads_with_no_input_20 DESC;
DataFrameas
df1
variable
WITH leads_by_campaign_utm AS(
SELECT
DISTINCT(campaign) AS campaign_name,
COUNT(lead_id) AS total_leads
FROM
ironworks_leads_last_90
WHERE payload LIKE '%utm_term%'
GROUP BY campaign
ORDER BY total_leads DESC
),
leads_by_campaign_no_utm AS(
SELECT
DISTINCT(campaign) AS campaign_name,
COUNT(lead_id) AS total_leads
FROM
ironworks_leads_last_90
WHERE payload NOT LIKE '%utm_term%'
GROUP BY campaign
ORDER BY total_leads DESC
)
SELECT
SUM(utm.total_leads) AS leads_with_utm,
SUM(no_utm.total_leads) AS leads_with_no_utm,
CONCAT(ROUND((SUM(no_utm.total_leads) / (SUM(no_utm.total_leads) + SUM(utm.total_leads))) * 100, 2), '%') AS pct_no_utm
FROM leads_by_campaign_utm AS utm
JOIN leads_by_campaign_no_utm AS no_utm
ON utm.campaign_name = no_utm.campaign_name;
SELECT
COUNT(*)
FROM ironworks_leads_last_90
WHERE payload LIKE '%utm_term%' AND payload LIKE '%&rl_retarget=1%';
DataFrameas
df2
variable
SELECT
SUBSTRING(payload,
POSITION('rl_key' IN payload) + LENGTH('rl_key') + 1,
POSITION('&cpn' IN payload) - POSITION('rl_key' IN payload) - LENGTH('rl_key') - 1) AS rl_key_value
FROM ironworks_leads_last_90
WHERE payload LIKE '%rl_key%'
ORDER BY rl_key_value;