import os
from profound import Profound
client = Profound(api_key=os.environ["PROFOUND_API_KEY"])
# What to fetch — replace with your own values.
CATEGORY_NAME = "<your-category-name>"
ASSET_NAME = "<your-asset-name>"
START_DATE = "2026-05-05"
END_DATE = "2026-05-12" # exclusive — returns data through 2026-05-11
def get_headline_score(category_id, asset_name, start_date, end_date):
"""Traffic-weighted period score (no date dim)."""
res = client.reports.visibility(
category_id=category_id,
start_date=start_date,
end_date=end_date,
metrics=["visibility_score"],
filters=[{"field": "asset_name", "operator": "is", "value": asset_name}],
)
order = res.info.query["metrics"]
return res.data[0].metrics[order.index("visibility_score")]
def get_daily_series(category_id, asset_name, start_date, end_date):
"""One (date, score) point per day — for the line chart."""
res = client.reports.visibility(
category_id=category_id,
start_date=start_date,
end_date=end_date,
metrics=["visibility_score"],
dimensions=["date"],
date_interval="day",
filters=[{"field": "asset_name", "operator": "is", "value": asset_name}],
)
m_order = res.info.query["metrics"]
d_order = res.info.query["dimensions"]
i_score = m_order.index("visibility_score")
i_date = d_order.index("date")
points = [
(row.dimensions[i_date], row.metrics[i_score])
for row in res.data
]
return sorted(points, key=lambda p: p[0])
# Helpers — translate human-readable names into the IDs the report API needs.
def find_category_id(name):
"""Return the UUID of the category whose name matches (case-insensitive)."""
for c in client.organizations.categories.list():
if c.name.lower() == name.lower():
return c.id
raise ValueError(f"No category named {name!r}")
def find_asset_name(category_id, name):
"""Return the canonical asset name (case-insensitive) inside the category."""
for a in client.organizations.categories.assets(category_id):
if a.name.lower() == name.lower():
return a.name
raise ValueError(f"No asset named {name!r} in this category")
# Resolve names → IDs, then run both calls.
category_id = find_category_id(CATEGORY_NAME)
asset_name = find_asset_name(category_id, ASSET_NAME)
headline_score = get_headline_score(category_id, asset_name, START_DATE, END_DATE)
daily = get_daily_series(category_id, asset_name, START_DATE, END_DATE)
print(f"Headline: {headline_score:.1%}\n")
print("Daily:")
for date, score in daily:
print(f" {date} {score:.1%}")