// ===== 共通型 =====
export interface PropertyId {
propertyId?: string;
}
export type Period = "today" | "yesterday" | "7days" | "28days" | "30days" | "90days";
export type ShortPeriod = "today" | "yesterday" | "7days" | "28days" | "30days";
// ===== 基本ツール =====
// list_accounts
export interface Account {
accountId: string;
accountName: string;
properties: Property[];
}
export interface Property {
propertyId: string;
propertyName: string;
}
export interface ListAccountsOutput {
accounts: Account[];
}
// get_property_details
export interface GetPropertyDetailsInput extends PropertyId {
propertyId: string;
}
export interface PropertyDetails {
propertyId: string;
displayName: string;
timeZone: string;
currencyCode: string;
industryCategory?: string;
serviceLevel?: string;
createTime?: string;
updateTime?: string;
}
// run_report
export interface DimensionFilter {
fieldName: string;
stringFilter: {
matchType: "EXACT" | "BEGINS_WITH" | "CONTAINS" | "ENDS_WITH" | "REGEXP";
value: string;
caseSensitive?: boolean;
};
}
export interface OrderBy {
metric?: string;
dimension?: string;
desc?: boolean;
}
export interface RunReportInput extends PropertyId {
startDate: string;
endDate: string;
dimensions: string[];
metrics: string[];
dimensionFilter?: DimensionFilter;
orderBy?: OrderBy;
limit?: number;
}
export interface ReportRow {
dimensions: Record<string, string>;
metrics: Record<string, number | string>;
}
export interface RunReportOutput {
rows: ReportRow[];
rowCount: number;
totals?: Record<string, number | string>;
metadata?: {
dataLossFromOtherRow: boolean;
};
}
// run_realtime_report
export interface RunRealtimeReportInput extends PropertyId {
dimensions?: string[];
metrics?: string[];
}
export interface RealtimeReportOutput {
rows: ReportRow[];
rowCount: number;
totals?: Record<string, number | string>;
}
// get_metadata
export interface MetadataItem {
apiName: string;
uiName: string;
description: string;
category: string;
}
export interface GetMetadataOutput {
dimensions: MetadataItem[];
metrics: MetadataItem[];
}
// ===== 分析ツール =====
// get_traffic_summary
export interface GetTrafficSummaryInput extends PropertyId {
period: Period;
}
export interface TrafficSummaryOutput {
totalPageViews: number;
totalUsers: number;
totalSessions: number;
newUsers: number;
avgSessionDuration: string;
bounceRate: string;
engagementRate: string;
pagesPerSession: number;
period: {
startDate: string;
endDate: string;
};
}
// get_top_pages
export interface GetTopPagesInput extends PropertyId {
period: ShortPeriod;
limit?: number;
pathFilter?: string;
}
export interface TopPage {
rank: number;
pagePath: string;
pageTitle: string;
pageViews: number;
uniquePageViews: number;
avgTimeOnPage: string;
bounceRate: string;
}
export interface GetTopPagesOutput {
pages: TopPage[];
}
// get_traffic_sources
export type TrafficSourceGroupBy = "channel" | "source" | "medium" | "sourceMedium" | "campaign";
export interface GetTrafficSourcesInput extends PropertyId {
period: Period;
groupBy: TrafficSourceGroupBy;
}
export interface TrafficSource {
name: string;
sessions: number;
users: number;
percentage: string;
bounceRate: string;
conversionRate?: string;
}
export interface GetTrafficSourcesOutput {
sources: TrafficSource[];
}
// get_device_breakdown
export interface GetDeviceBreakdownInput extends PropertyId {
period: ShortPeriod;
}
export interface DeviceData {
deviceCategory: "desktop" | "mobile" | "tablet";
users: number;
sessions: number;
percentage: string;
bounceRate: string;
avgSessionDuration: string;
}
export interface OSData {
name: string;
users: number;
percentage: string;
}
export interface BrowserData {
name: string;
users: number;
percentage: string;
}
export interface GetDeviceBreakdownOutput {
devices: DeviceData[];
operatingSystems?: OSData[];
browsers?: BrowserData[];
}
// get_geo_breakdown
export interface GetGeoBreakdownInput extends PropertyId {
period: ShortPeriod;
level: "country" | "city";
limit?: number;
}
export interface LocationData {
name: string;
users: number;
sessions: number;
percentage: string;
}
export interface GetGeoBreakdownOutput {
locations: LocationData[];
}
// compare_periods
export type ComparisonType = "previousPeriod" | "previousYear" | "custom";
export interface DateRange {
startDate: string;
endDate: string;
}
export interface ComparePeriodInput extends PropertyId {
comparisonType: ComparisonType;
period?: "7days" | "28days" | "30days";
period1?: DateRange;
period2?: DateRange;
metrics?: string[];
}
export interface MetricComparison {
metric: string;
period1Value: number;
period2Value: number;
change: number;
changePercent: string;
trend: "up" | "down" | "flat";
}
export interface ComparePeriodOutput {
period1: DateRange & { label: string };
period2: DateRange & { label: string };
comparison: MetricComparison[];
}
// get_landing_pages
export interface GetLandingPagesInput extends PropertyId {
period: ShortPeriod;
limit?: number;
}
export interface LandingPage {
pagePath: string;
entrances: number;
users: number;
bounceRate: string;
avgSessionDuration: string;
}
export interface GetLandingPagesOutput {
landingPages: LandingPage[];
}
// get_exit_pages
export interface GetExitPagesInput extends PropertyId {
period: ShortPeriod;
limit?: number;
}
export interface ExitPage {
pagePath: string;
exits: number;
exitRate: string;
}
export interface GetExitPagesOutput {
exitPages: ExitPage[];
}
// get_user_journey
export interface GetUserJourneyInput extends PropertyId {
period: ShortPeriod;
pagePath: string;
direction: "next" | "previous";
limit?: number;
}
export interface RelatedPage {
pagePath: string;
count: number;
percentage: string;
}
export interface GetUserJourneyOutput {
targetPage: string;
direction: "next" | "previous";
relatedPages: RelatedPage[];
}
// get_conversion_funnel
export interface FunnelStep {
name: string;
pagePath: string;
}
export interface GetConversionFunnelInput extends PropertyId {
period: ShortPeriod;
steps: FunnelStep[];
}
export interface FunnelStepResult {
step: number;
name: string;
users: number;
dropoffRate: string;
conversionRate: string;
}
export interface GetConversionFunnelOutput {
funnel: FunnelStepResult[];
overallConversionRate: string;
}
// get_hourly_traffic
export interface GetHourlyTrafficInput extends PropertyId {
period: ShortPeriod;
}
export interface HourlyData {
hour: number;
avgUsers: number;
avgPageViews: number;
peakIndicator: boolean;
}
export interface GetHourlyTrafficOutput {
hourlyData: HourlyData[];
peakHours: number[];
quietHours: number[];
}
// get_daily_trend
export interface GetDailyTrendInput extends PropertyId {
startDate: string;
endDate: string;
metrics?: string[];
}
export interface DailyData {
date: string;
[metricName: string]: number | string;
}
export interface GetDailyTrendOutput {
trend: DailyData[];
summary: {
total: Record<string, number>;
average: Record<string, number>;
max: { date: string } & Record<string, number>;
min: { date: string } & Record<string, number>;
};
}
// get_new_vs_returning
export interface GetNewVsReturningInput extends PropertyId {
period: ShortPeriod;
}
export interface UserTypeData {
count: number;
percentage: string;
sessions: number;
avgSessionDuration: string;
bounceRate: string;
}
export interface GetNewVsReturningOutput {
newUsers: UserTypeData;
returningUsers: UserTypeData;
}
// get_engagement_metrics
export interface GetEngagementMetricsInput extends PropertyId {
period: ShortPeriod;
}
export interface ScrollDepth {
reached25: string;
reached50: string;
reached75: string;
reached100: string;
}
export interface GetEngagementMetricsOutput {
engagementRate: string;
avgEngagementTime: string;
engagedSessionsPerUser: number;
eventsPerSession: number;
scrollDepth?: ScrollDepth;
}
// get_search_terms
export interface GetSearchTermsInput extends PropertyId {
period: ShortPeriod;
limit?: number;
}
export interface SearchTerm {
term: string;
searchCount: number;
uniqueSearches: number;
resultsPageviews: number;
searchExitRate: string;
}
export interface GetSearchTermsOutput {
searchTerms: SearchTerm[];
}