Turn Semrush Market Explorer into a competitive market map you can actually analyse
Size a market before you enter it, see who owns the traffic in a category, and get the data into Power BI without the export breaking every time Semrush moves a field.
Semrush Market Explorer answers one question well. Who owns the traffic in a category, and how much room is left. The harder part is getting that answer out of the interface and into a place where you can slice it. That is where most teams stall, and that is what this guide fixes.
01What is Semrush Market Explorer?
Semrush Market Explorer is a competitive-intelligence tool that sizes a market and shows how estimated traffic is split across the domains competing in it. It takes a seed domain or a manually built list of competitors, then returns market share, traffic volume, audience overlap, and growth trajectory for that competitive set. You are not looking at a single site’s keywords here. You are looking at a whole category from above.
The practitioner value sits in two moves. Building the competitive set yourself, and reading share-of-traffic as a proxy for who is actually winning attention.
Market Explorer is a map of a category. Your job is to find the whitespace nobody is defending.
02What is Semrush Market Explorer used for?
Semrush Market Explorer is used for competitive market sizing and share-of-traffic benchmarking, the two jobs a challenger brand needs before committing budget. You use it to answer where a market’s demand sits, who currently captures it, and how large the gap is between the leader and everyone else. Two examples from our own work make the pattern concrete.
In B2C fashion, we build a competitive set of rival labels and retailers, then benchmark share-of-traffic across it before a campaign or a market push. The point is not vanity ranking. It is knowing, in advance, which competitors already own the attention you are about to pay for, so the campaign targets ground you can realistically take.
In B2B labeling and self-adhesive materials, the question is market entry. Who is visible in a new segment, how large is the demand, and where is the gap a challenger can move into. Market Explorer gives us the visibility picture. The sizing tells us whether the segment is worth the effort at all.
- 01Share-of-traffic - who owns attention in this category right now.
- 02Whitespace - which segment has demand but no dominant incumbent.
03How do you get Semrush Market Explorer data into Power BI?
You get Semrush Market Explorer data into Power BI by exporting the All Domains report as CSV, then reshaping it with a transform that renames columns to a stable schema before Power BI ever touches the file. Power BI cares about consistent column names. Semrush exports do not guarantee them. The transform sits in between and settles the argument.
Here is the function we use. It verifies both file paths first, so a missing export or a missing mapping fails loudly instead of producing a silently wrong table. It then renames every column through a mapping CSV you own, reindexes to the exact column shape Power BI expects, and fills gaps deterministically - empty strings for text, zero for numbers - so nothing lands as an ambiguous null.
import pandas as pd
import os
def verify_file_path(path):
"""Check if a file exists at the given path and print a message."""
if os.path.exists(path):
print(f"File found: {path}")
return True
else:
print(f"File not found: {path}")
return False
def transform_and_prepare_for_power_bi(input_file_path, mapping_file_path, output_file_path):
# Verify file paths
if not verify_file_path(input_file_path) or not verify_file_path(mapping_file_path):
return # Exit the function if any file is missing
# Load the mapping table with the correct delimiter
mapping_data = pd.read_csv(mapping_file_path, delimiter=';')
mapping_dict = mapping_data.dropna().set_index('Mapping.New')['Mapping.Old'].to_dict()
# Load the data
data = pd.read_csv(input_file_path)
# Rename columns according to the mapping table, reindex to ensure all 'Mapping.Old' columns are present
data_transformed = data.rename(columns=mapping_dict).reindex(columns=mapping_data['Mapping.Old'].tolist(), fill_value="")
# Filling missing values - empty strings for text, 0 for numbers
text_columns = data_transformed.select_dtypes(include=['object']).columns
numeric_columns = data_transformed.select_dtypes(include=['number']).columns
data_transformed[text_columns] = data_transformed[text_columns].fillna("")
data_transformed[numeric_columns] = data_transformed[numeric_columns].fillna(0)
# Save the transformed data
data_transformed.to_csv(output_file_path, index=False, encoding='utf-8')
print(f"Data transformed and saved successfully to {output_file_path}")
# Define file paths within the main block of the script to ensure they are recognized
input_file_path = 'Your Input File Path!\\2024-03-Worldwide.csv'
mapping_file_path = 'Your Mapping File Path!\\mapping-semrush.csv'
output_file_path = 'Your Output Path!\\Transformed_Data_for_PowerBI.csv'
# Run the transformation function
transform_and_prepare_for_power_bi(input_file_path, mapping_file_path, output_file_path)
Read the transform as three decisions, not as boilerplate.
04How do you keep the pipeline stable when Semrush changes fields?
You keep the pipeline stable by putting a mapping CSV between Semrush’s column names and your Power BI schema, so a field change is a one-line edit rather than a broken report. The mapping file has two columns, Mapping.New and Mapping.Old. New is whatever Semrush calls the column today. Old is the stable name your Power BI model already expects. The transform reads that file and does the translation for you.
This pattern earns its keep the first time Semrush moves something. In March 2024, Semrush restructured the dimensions on the Trends Market Explorer All Domains report. For anyone importing raw columns, that broke every dashboard bound to the old names. For anyone using a mapping CSV, it was a handful of edited rows and one re-run. That is the whole argument for owning the mapping instead of hardcoding column names in Power BI.
- 01It lives in git, so every field change has a diff and a date.
- 02It is one file, reusable across every market and every export.
- 03A vendor rename becomes an edited row, not a rebuilt report.
The dimension change is history now. The pattern is not. Any competitive-intelligence export you feed into BI will drift eventually, and a mapping file you control is the cheapest insurance against that drift. Build the map once. Keep it in version control. Let the vendor rename whatever it likes.