type CacheStatus { cached: Boolean! ageSeconds: Int } type Ga4ConversionsResponse { conversionsLast30D: String! conversionsPrev30D: String! cache: CacheStatus! } type Ga4LandingPageRow { landingPage: String! sessions: Float! conversions: Float! conversionRate: Float! } type Ga4LandingPagesResponse { rows: [Ga4LandingPageRow!]! cache: CacheStatus! } type Ga4PropertySummary { property: String! displayName: String! stats: Ga4Stats } type Ga4SessionPoint { date: String! sessions: Float! } type Ga4Stats { organicSessions: StatWithChange! conversions: StatWithChange! } type Ga4Summary { activeUsers: String! sessions: String! sessionsPrev30D: String! sessionsLast7D: String! sessionsPrev7D: String! sessionsTimeseries: [Ga4SessionPoint!]! cache: CacheStatus! } type Ga4TopEventRow { eventName: String! eventCount: Float! conversions: Float! } type Ga4TopEventsResponse { rows: [Ga4TopEventRow!]! cache: CacheStatus! } type GscSite { siteUrl: String! stats: GscStats } type GscStats { clicks: StatWithChange! impressions: StatWithChange! ctr: StatWithChange! position: StatWithChange! } type QueryRoot { ga4Summary(propertyId: String!): Ga4Summary! ga4Conversions(propertyId: String!): Ga4ConversionsResponse! ga4Properties: [Ga4PropertySummary!]! ga4LandingPages(propertyId: String, startDate: String, endDate: String, dateRange: String, device: String): Ga4LandingPagesResponse! ga4TopEvents(propertyId: String, startDate: String, endDate: String, dateRange: String, device: String): Ga4TopEventsResponse! scSites: [GscSite!]! scSummary(siteUrl: String!): ScSummary! scQuery(siteUrl: String!, startDate: String, endDate: String, dateRange: String, device: String): ScData! scPages(siteUrl: String!, startDate: String, endDate: String, dateRange: String, device: String): ScData! scKeywordAnalysis(siteUrl: String!): ScData! } type ScData { rows: [ScRow!]! submittedIndexedCount: Int! cache: CacheStatus! } type ScRow { clicks: Float! impressions: Float! ctr: Float! position: Float! keys: [String!] } type ScSummary { clicks30D: Float! clicksPrev30D: Float! clicks7D: Float! clicksPrev7D: Float! impressions30D: Float! impressionsPrev30D: Float! impressions7D: Float! impressionsPrev7D: Float! cache: CacheStatus! } type StatWithChange { value: Float! changePercent: Float! } """ Directs the executor to include this field or fragment only when the `if` argument is true. """ directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT """ Directs the executor to skip this field or fragment when the `if` argument is true. """ directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT schema { query: QueryRoot }