SALES MARKER / CLIENT CONSULTING

Superset data over MCP — field specification

This is the requirement behind SIG-667 to SIG-670. We currently export this data from Superset by hand as CSV; we would like to read it through MCP instead. Below we pin down exactly which screen and which data, using the real export column names.

Sales Marker, Inc. / Client Consulting / 2026-07-30

What it is forThese two use cases are what make a field required or optional

Report

Generating the monthly customer report

ISC reps produce a monthly report for each customer. Today that means exporting CSVs from Superset by hand; we want to generate it through MCP instead. What we report today: call volume, talk rate, appointment rate, companies with appointments, the no-answer / blocked-at-reception breakdown, monthly and weekly trend, and cuts by list, industry and company size.

Churn signal

Detecting churn risk with a health score

We want to catch, across all accounts, when outreach has stopped, when detected companies are going unworked, when an integration has broken, and when logins are falling off. We roll that into a score per contract and work the accounts whose renewal is closest.

The one thing that matters mostIf detection and outreach cannot be joined, both data sets lose half their value

Intent detectionWhich companies moved,
by keyword, visitor or domain
OutreachWhether we actually
acted on them
OutcomeWhether it led to
a conversation or a meeting
Health scoreWhether the account is running,
and whether churn is coming
So please include the target company corporate ID in both data sets

The current Keyword Hit export carries the company name only, which forces us to match on name. With the corporate ID we can show directly how many of the detected companies were actually worked.

Answers to your questionsResponses to the points raised in the thread

Approach resultsYour understanding: the number of sends per channel
That alone is not enough. On top of "was it sent" we need "what happened" (the phase name) and unique counts per company. Neither talk rate nor appointment rate has a numerator without them.
Intent detection results (keyword, visitor, domain)Your understanding: hit counts and the companies
That is right. Counts alone cannot drive any change in how the account is run, so please always include the companies. We would also like the corporate ID of each detected company so we can join it with the activity data — the current CSV has the company name only.
System integration statusYour understanding: Salesforce and other integrations
Beyond whether one exists, we want the last sync timestamp and the most recent error. "Configured but no longer syncing" is exactly what we want to catch as a churn signal.
User login statusYour understanding: login history per user
History plus per-subscription aggregates (active seats against issued seats, WAU / MAU) would let us feed it straight into the health score.

Linear ticketsWhich ticket covers which data set

LinearData set
SIG-667Approach results
SIG-668Intent detection results
SIG-669System integration status
SIG-670User login status

Field specificationField names are the Superset export columns as they are. "Required" means the current reporting cannot be produced without it

Shaded rows are fields that do not exist in the current export — these are the additions we would like to ask for.

Approach results (activity detail)

1 row = 1 activity total 26 fields / 24 required

Equivalent to the Superset "活動一覧" (activity list) export. One row per call or send, including what came of it.

Field (Superset column)Suggested field nameType RequiredWhat we use it forNotes
subscription_namestringRequiredIdentifies the customer
target_company_namestringRequiredIdentifies the company being approached
target_company_idstringRequiredJoin key against the intent detection dataThe single most important field. Without it we cannot measure detection-to-approach conversion
industry_majorstringRequiredAppointment rate by industry
industry_minorstringRequiredDrill-down by industry
employee_countnumberRequiredDrill-down by company size
employee_rangestringRequiredAppointment rate by company size
revenue_rangestringRequiredDrill-down by company size
capitalnumberOptional
capital_rangestringOptional
prefecturestringRequiredResults by region
channelstringRequiredPer-channel results; the denominator for call volumeCall, email, form, ad, SNS, letter
phase_namestringRequiredTalk rate, no-answer rate, blocked-at-reception rateNot "was it sent" but "what happened". This is the pivotal field
phase_categorystringRequiredRolled-up view of phases
phase_category_normalizedstringRequiredAggregation after normalizing wording
has_departmentbooleanRequiredHow call outcomes differ when a contact name is known
contact_reachedbooleanRequiredContact-reached rate (the official flag)
activity_datedateRequiredMonthly and weekly trend
has_signal_30dbooleanRequiredAppointment rate with vs. without a signalUsed to verify whether intent-based targeting works
has_keyword_signal_30dbooleanRequiredEffectiveness by signal type
has_visitor_intent_30dbooleanRequiredEffectiveness by signal type
has_domain_intent_30dbooleanRequiredEffectiveness by signal typeThe deal list has "domain intent" but the activity list does not. Please align them
has_appointmentbooleanRequiredAppointment rate and number of companies with appointments
approacherstringRequiredResults per rep
productstringRequiredFilter by productRequired for customers running more than one product
call_list_namestringRequiredResults per call list

Approach results (per company)

1 row = 1 target company total 44 fields / 38 required

Equivalent to the Superset "案件一覧" (deal list) export. Which channels reached each company, and its latest status.

Field (Superset column)Suggested field nameType RequiredWhat we use it forNotes
subscription_idstringRequiredIdentifies the customer; join key against the other data sets
subscription_namestringRequiredIdentifies the customer
isc_ownerstringRequiredManaged per rep
target_company_idstringRequiredJoin key against both activity and detection data
target_company_namestringRequiredIdentifies the company being approached
industry_majorstringRequiredDistribution by industry
industry_minorstringRequiredDrill-down by industry
employee_countnumberRequiredDrill-down by company size
employee_rangestringRequiredDistribution by company size
revenue_rangestringRequiredDrill-down by company size
capitalnumberOptional
capital_rangestringOptional
first_activity_datedateRequiredDays elapsed since first contact
last_activity_datedateRequiredDetects companies that have gone untouched
channelsstringRequiredWhether multi-channel outreach is actually runningWhether several channels are combined
approach_categorystringRequiredSeparates approached from not-yet-approached
latest_statusstringRequiredOpen counts by next action
has_signal_30dbooleanRequiredWhat share of detected companies were actually approached
has_keyword_signalbooleanRequiredCoverage rate by signal type
has_visitor_intent_30dbooleanRequiredCoverage rate by signal type
has_domain_intentbooleanRequiredCoverage rate by signal type
keywords_7dstring[]OptionalThe last-30-days field is sufficient
keywords_30dstring[]RequiredWhich keyword triggered the detectionUsed for per-keyword performance analysis
keywords_90dstring[]OptionalThe last-30-days field is sufficient
visited_pages_7dstring[]OptionalThe last-30-days field is sufficient
visited_pages_30dstring[]RequiredWhat topics the company is interested in
visited_pages_90dstring[]OptionalThe last-30-days field is sufficient
list_namestringRequiredProgress per list
list_countnumberRequiredSize of each list
has_callbooleanRequiredWhich channels reached the company
call_datedateRequiredWhen each channel was used
has_mailbooleanRequiredWhich channels reached the company
mail_sent_datedateRequiredWhen each channel was used
has_formbooleanRequiredWhich channels reached the company
form_sent_datedateRequiredWhen each channel was used
has_form_clickbooleanRequiredResponse via the form
form_click_datedateRequiredWhen the response happened
has_adbooleanRequiredWhich channels reached the company
ad_approach_datedateRequiredWhen it happened
has_ad_impressionbooleanRequiredAd reach
ad_impression_datedateRequiredWhen it happened
has_ad_clickbooleanRequiredAd response (a headline metric in the report)
ad_click_datedateRequiredWhen the response happened
has_appointmentbooleanRequiredCompanies with appointments (company-based appointment rate)

Intent detection results

1 row = customer x keyword x week (visitor / domain intent is per company) total 13 fields / 12 required

Equivalent to the Weekly Hit tab of the Superset "Keyword Hit Dashboard". Hit counts together with the detected companies.

Field (Superset column)Suggested field nameType RequiredWhat we use it forNotes
subscription_idstringRequiredIdentifies the customerExisting column in the Keyword Hit Dashboard
company_namestringRequiredThe detected companyExisting column
company_idstringRequiredJoin key against the activity dataNot in the current CSV. Please add it so we do not have to match on company name
weekdateRequiredWeekly hit trendExisting column
target_productstringRequiredOperating results per productExisting column. The same keyword is sometimes run for several products
keywordstringRequiredHits per keywordExisting column
keyword_start_datedateRequiredWhen the keyword started runningExisting column
keyword_expire_datedateRequiredWhen the keyword was rotated outExisting column
keyword_statusstringRequiredDistinguishes running from stoppedExisting column
hit_30daynumberRequiredHits in the last 30 daysExisting column
hit_90daynumberOptionalExisting column. The 30-day figure is sufficient
visitor_intent_companiesobject[]RequiredWhich companies visited the customer's own siteCompany name, corporate ID, visited pages and detection date as a set
domain_intent_companiesobject[]RequiredDetection at the domain levelCompany name, corporate ID and detection date as a set

System integration status

1 row = customer x integration total 9 fields / 9 required

Not only whether an integration exists, but whether it is still alive (last sync, errors).

Field (Superset column)Suggested field nameType RequiredWhat we use it forNotes
subscription_idstringRequiredIdentifies the customer
integration_typestringRequiredWhat the customer is integrated withSalesforce, HubSpot, others
is_enabledbooleanRequiredWhether an integration existsThis is the "SF and other integrations" you asked about
auth_methodstringRequiredHow the integration is set upOAuth, API key, etc.
connected_atdateRequiredHow long the integration has been in place
last_synced_atdatetimeRequiredTells us whether the integration is still aliveWe want to detect "configured but no longer running"
last_sync_statusstringRequiredWhether the sync succeededSuccess / failure
last_sync_errorstringRequiredIdentifies why the sync stoppedWe want to pick this up as a churn signal
synced_objectsstring[]RequiredHow deep the integration goesLead, account, opportunity, etc.

User login status

1 row = customer x user (plus per-subscription aggregates) total 10 fields / 10 required

Login history, and utilization against the seats the contract provides.

Field (Superset column)Suggested field nameType RequiredWhat we use it forNotes
subscription_idstringRequiredIdentifies the customer
user_idstringRequiredIdentifies the user
user_namestringRequiredIdentifies who is actually using the productUsed to detect when the internal champion has moved on or left
rolestringRequiredWhether the administrator is active
is_activebooleanRequiredThe denominator of issued seats
last_login_atdatetimeRequiredDetects disengagementA core input to the health score
login_countnumberRequiredUsage frequency
issued_seatsnumberRequiredHow widely the contract is actually usedPlease return this as a per-subscription aggregate
active_seatsnumberRequiredUtilization (active seats / issued seats)Aggregate per subscription
wau_maunumberRequiredTrend in usage, up or downAggregate per subscription

What we would like from the tool interfaceThe part the field list alone does not settle: how it is called and how much comes back