diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.5.0`
+`1.0.0`
 
 
 ## Description
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,3 @@
-import           Distribution.Simple
+import Distribution.Simple
+
 main = defaultMain
diff --git a/gen/Gogol/AnalyticsReporting.hs b/gen/Gogol/AnalyticsReporting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AnalyticsReporting.hs
@@ -0,0 +1,316 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AnalyticsReporting
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accesses Analytics report data.
+--
+-- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference>
+module Gogol.AnalyticsReporting
+  ( -- * Configuration
+    analyticsReportingService,
+
+    -- * OAuth Scopes
+    Analytics'FullControl,
+    Analytics'Readonly,
+
+    -- * Resources
+
+    -- ** analyticsreporting.reports.batchGet
+    AnalyticsReportingReportsBatchGetResource,
+    AnalyticsReportingReportsBatchGet (..),
+    newAnalyticsReportingReportsBatchGet,
+
+    -- ** analyticsreporting.userActivity.search
+    AnalyticsReportingUserActivitySearchResource,
+    AnalyticsReportingUserActivitySearch (..),
+    newAnalyticsReportingUserActivitySearch,
+
+    -- * Types
+
+    -- ** Xgafv
+    Xgafv (..),
+
+    -- ** Activity
+    Activity (..),
+    newActivity,
+
+    -- ** Activity_ActivityType
+    Activity_ActivityType (..),
+
+    -- ** Cohort
+    Cohort (..),
+    newCohort,
+
+    -- ** Cohort_Type
+    Cohort_Type (..),
+
+    -- ** CohortGroup
+    CohortGroup (..),
+    newCohortGroup,
+
+    -- ** ColumnHeader
+    ColumnHeader (..),
+    newColumnHeader,
+
+    -- ** CustomDimension
+    CustomDimension (..),
+    newCustomDimension,
+
+    -- ** DateRange
+    DateRange (..),
+    newDateRange,
+
+    -- ** DateRangeValues
+    DateRangeValues (..),
+    newDateRangeValues,
+
+    -- ** Dimension
+    Dimension (..),
+    newDimension,
+
+    -- ** DimensionFilter
+    DimensionFilter (..),
+    newDimensionFilter,
+
+    -- ** DimensionFilter_Operator
+    DimensionFilter_Operator (..),
+
+    -- ** DimensionFilterClause
+    DimensionFilterClause (..),
+    newDimensionFilterClause,
+
+    -- ** DimensionFilterClause_Operator
+    DimensionFilterClause_Operator (..),
+
+    -- ** DynamicSegment
+    DynamicSegment (..),
+    newDynamicSegment,
+
+    -- ** EcommerceData
+    EcommerceData (..),
+    newEcommerceData,
+
+    -- ** EcommerceData_ActionType
+    EcommerceData_ActionType (..),
+
+    -- ** EcommerceData_EcommerceType
+    EcommerceData_EcommerceType (..),
+
+    -- ** EventData
+    EventData (..),
+    newEventData,
+
+    -- ** GetReportsRequest
+    GetReportsRequest (..),
+    newGetReportsRequest,
+
+    -- ** GetReportsResponse
+    GetReportsResponse (..),
+    newGetReportsResponse,
+
+    -- ** GoalData
+    GoalData (..),
+    newGoalData,
+
+    -- ** GoalSetData
+    GoalSetData (..),
+    newGoalSetData,
+
+    -- ** Metric
+    Metric (..),
+    newMetric,
+
+    -- ** Metric_FormattingType
+    Metric_FormattingType (..),
+
+    -- ** MetricFilter
+    MetricFilter (..),
+    newMetricFilter,
+
+    -- ** MetricFilter_Operator
+    MetricFilter_Operator (..),
+
+    -- ** MetricFilterClause
+    MetricFilterClause (..),
+    newMetricFilterClause,
+
+    -- ** MetricFilterClause_Operator
+    MetricFilterClause_Operator (..),
+
+    -- ** MetricHeader
+    MetricHeader (..),
+    newMetricHeader,
+
+    -- ** MetricHeaderEntry
+    MetricHeaderEntry (..),
+    newMetricHeaderEntry,
+
+    -- ** MetricHeaderEntry_Type
+    MetricHeaderEntry_Type (..),
+
+    -- ** OrFiltersForSegment
+    OrFiltersForSegment (..),
+    newOrFiltersForSegment,
+
+    -- ** OrderBy
+    OrderBy (..),
+    newOrderBy,
+
+    -- ** OrderBy_OrderType
+    OrderBy_OrderType (..),
+
+    -- ** OrderBy_SortOrder
+    OrderBy_SortOrder (..),
+
+    -- ** PageviewData
+    PageviewData (..),
+    newPageviewData,
+
+    -- ** Pivot
+    Pivot (..),
+    newPivot,
+
+    -- ** PivotHeader
+    PivotHeader (..),
+    newPivotHeader,
+
+    -- ** PivotHeaderEntry
+    PivotHeaderEntry (..),
+    newPivotHeaderEntry,
+
+    -- ** PivotValueRegion
+    PivotValueRegion (..),
+    newPivotValueRegion,
+
+    -- ** ProductData
+    ProductData (..),
+    newProductData,
+
+    -- ** Report
+    Report (..),
+    newReport,
+
+    -- ** ReportData
+    ReportData (..),
+    newReportData,
+
+    -- ** ReportRequest
+    ReportRequest (..),
+    newReportRequest,
+
+    -- ** ReportRequest_SamplingLevel
+    ReportRequest_SamplingLevel (..),
+
+    -- ** ReportRow
+    ReportRow (..),
+    newReportRow,
+
+    -- ** ResourceQuotasRemaining
+    ResourceQuotasRemaining (..),
+    newResourceQuotasRemaining,
+
+    -- ** ScreenviewData
+    ScreenviewData (..),
+    newScreenviewData,
+
+    -- ** SearchUserActivityRequest
+    SearchUserActivityRequest (..),
+    newSearchUserActivityRequest,
+
+    -- ** SearchUserActivityRequest_ActivityTypesItem
+    SearchUserActivityRequest_ActivityTypesItem (..),
+
+    -- ** SearchUserActivityResponse
+    SearchUserActivityResponse (..),
+    newSearchUserActivityResponse,
+
+    -- ** Segment
+    Segment (..),
+    newSegment,
+
+    -- ** SegmentDefinition
+    SegmentDefinition (..),
+    newSegmentDefinition,
+
+    -- ** SegmentDimensionFilter
+    SegmentDimensionFilter (..),
+    newSegmentDimensionFilter,
+
+    -- ** SegmentDimensionFilter_Operator
+    SegmentDimensionFilter_Operator (..),
+
+    -- ** SegmentFilter
+    SegmentFilter (..),
+    newSegmentFilter,
+
+    -- ** SegmentFilterClause
+    SegmentFilterClause (..),
+    newSegmentFilterClause,
+
+    -- ** SegmentMetricFilter
+    SegmentMetricFilter (..),
+    newSegmentMetricFilter,
+
+    -- ** SegmentMetricFilter_Operator
+    SegmentMetricFilter_Operator (..),
+
+    -- ** SegmentMetricFilter_Scope
+    SegmentMetricFilter_Scope (..),
+
+    -- ** SegmentSequenceStep
+    SegmentSequenceStep (..),
+    newSegmentSequenceStep,
+
+    -- ** SegmentSequenceStep_MatchType
+    SegmentSequenceStep_MatchType (..),
+
+    -- ** SequenceSegment
+    SequenceSegment (..),
+    newSequenceSegment,
+
+    -- ** SimpleSegment
+    SimpleSegment (..),
+    newSimpleSegment,
+
+    -- ** TransactionData
+    TransactionData (..),
+    newTransactionData,
+
+    -- ** User
+    User (..),
+    newUser,
+
+    -- ** User_Type
+    User_Type (..),
+
+    -- ** UserActivitySession
+    UserActivitySession (..),
+    newUserActivitySession,
+  )
+where
+
+import Gogol.AnalyticsReporting.Reports.BatchGet
+import Gogol.AnalyticsReporting.Types
+import Gogol.AnalyticsReporting.UserActivity.Search
diff --git a/gen/Gogol/AnalyticsReporting/Internal/Product.hs b/gen/Gogol/AnalyticsReporting/Internal/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AnalyticsReporting/Internal/Product.hs
@@ -0,0 +1,2548 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AnalyticsReporting.Internal.Product
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Gogol.AnalyticsReporting.Internal.Product
+  ( -- * Activity
+    Activity (..),
+    newActivity,
+
+    -- * Cohort
+    Cohort (..),
+    newCohort,
+
+    -- * CohortGroup
+    CohortGroup (..),
+    newCohortGroup,
+
+    -- * ColumnHeader
+    ColumnHeader (..),
+    newColumnHeader,
+
+    -- * CustomDimension
+    CustomDimension (..),
+    newCustomDimension,
+
+    -- * DateRange
+    DateRange (..),
+    newDateRange,
+
+    -- * DateRangeValues
+    DateRangeValues (..),
+    newDateRangeValues,
+
+    -- * Dimension
+    Dimension (..),
+    newDimension,
+
+    -- * DimensionFilter
+    DimensionFilter (..),
+    newDimensionFilter,
+
+    -- * DimensionFilterClause
+    DimensionFilterClause (..),
+    newDimensionFilterClause,
+
+    -- * DynamicSegment
+    DynamicSegment (..),
+    newDynamicSegment,
+
+    -- * EcommerceData
+    EcommerceData (..),
+    newEcommerceData,
+
+    -- * EventData
+    EventData (..),
+    newEventData,
+
+    -- * GetReportsRequest
+    GetReportsRequest (..),
+    newGetReportsRequest,
+
+    -- * GetReportsResponse
+    GetReportsResponse (..),
+    newGetReportsResponse,
+
+    -- * GoalData
+    GoalData (..),
+    newGoalData,
+
+    -- * GoalSetData
+    GoalSetData (..),
+    newGoalSetData,
+
+    -- * Metric
+    Metric (..),
+    newMetric,
+
+    -- * MetricFilter
+    MetricFilter (..),
+    newMetricFilter,
+
+    -- * MetricFilterClause
+    MetricFilterClause (..),
+    newMetricFilterClause,
+
+    -- * MetricHeader
+    MetricHeader (..),
+    newMetricHeader,
+
+    -- * MetricHeaderEntry
+    MetricHeaderEntry (..),
+    newMetricHeaderEntry,
+
+    -- * OrFiltersForSegment
+    OrFiltersForSegment (..),
+    newOrFiltersForSegment,
+
+    -- * OrderBy
+    OrderBy (..),
+    newOrderBy,
+
+    -- * PageviewData
+    PageviewData (..),
+    newPageviewData,
+
+    -- * Pivot
+    Pivot (..),
+    newPivot,
+
+    -- * PivotHeader
+    PivotHeader (..),
+    newPivotHeader,
+
+    -- * PivotHeaderEntry
+    PivotHeaderEntry (..),
+    newPivotHeaderEntry,
+
+    -- * PivotValueRegion
+    PivotValueRegion (..),
+    newPivotValueRegion,
+
+    -- * ProductData
+    ProductData (..),
+    newProductData,
+
+    -- * Report
+    Report (..),
+    newReport,
+
+    -- * ReportData
+    ReportData (..),
+    newReportData,
+
+    -- * ReportRequest
+    ReportRequest (..),
+    newReportRequest,
+
+    -- * ReportRow
+    ReportRow (..),
+    newReportRow,
+
+    -- * ResourceQuotasRemaining
+    ResourceQuotasRemaining (..),
+    newResourceQuotasRemaining,
+
+    -- * ScreenviewData
+    ScreenviewData (..),
+    newScreenviewData,
+
+    -- * SearchUserActivityRequest
+    SearchUserActivityRequest (..),
+    newSearchUserActivityRequest,
+
+    -- * SearchUserActivityResponse
+    SearchUserActivityResponse (..),
+    newSearchUserActivityResponse,
+
+    -- * Segment
+    Segment (..),
+    newSegment,
+
+    -- * SegmentDefinition
+    SegmentDefinition (..),
+    newSegmentDefinition,
+
+    -- * SegmentDimensionFilter
+    SegmentDimensionFilter (..),
+    newSegmentDimensionFilter,
+
+    -- * SegmentFilter
+    SegmentFilter (..),
+    newSegmentFilter,
+
+    -- * SegmentFilterClause
+    SegmentFilterClause (..),
+    newSegmentFilterClause,
+
+    -- * SegmentMetricFilter
+    SegmentMetricFilter (..),
+    newSegmentMetricFilter,
+
+    -- * SegmentSequenceStep
+    SegmentSequenceStep (..),
+    newSegmentSequenceStep,
+
+    -- * SequenceSegment
+    SequenceSegment (..),
+    newSequenceSegment,
+
+    -- * SimpleSegment
+    SimpleSegment (..),
+    newSimpleSegment,
+
+    -- * TransactionData
+    TransactionData (..),
+    newTransactionData,
+
+    -- * User
+    User (..),
+    newUser,
+
+    -- * UserActivitySession
+    UserActivitySession (..),
+    newUserActivitySession,
+  )
+where
+
+import Gogol.AnalyticsReporting.Internal.Sum
+import Gogol.Prelude qualified as Core
+
+-- | An Activity represents data for an activity of a user. Note that an Activity is different from a hit. A hit might result in multiple Activity\'s. For example, if a hit includes a transaction and a goal completion, there will be two Activity protos for this hit, one for ECOMMERCE and one for GOAL. Conversely, multiple hits can also construct one Activity. In classic e-commerce, data for one transaction might be sent through multiple hits. These hits will be merged into one ECOMMERCE Activity.
+--
+-- /See:/ 'newActivity' smart constructor.
+data Activity = Activity
+  { -- | Timestamp of the activity. If activities for a visit cross midnight and occur in two separate dates, then two sessions (one per date) share the session identifier. For example, say session ID 113472 has activity within 2019-08-20, and session ID 243742 has activity within 2019-08-25 and 2019-08-26. Session ID 113472 is one session, and session ID 243742 is two sessions.
+    activityTime :: (Core.Maybe Core.DateTime),
+    -- | Type of this activity.
+    activityType :: (Core.Maybe Activity_ActivityType),
+    -- | This will be set if @activity_type@ equals @SCREEN_VIEW@.
+    appview :: (Core.Maybe ScreenviewData),
+    -- | For manual campaign tracking, it is the value of the utm_campaign campaign tracking parameter. For AdWords autotagging, it is the name(s) of the online ad campaign(s) you use for the property. If you use neither, its value is (not set).
+    campaign :: (Core.Maybe Core.Text),
+    -- | The Channel Group associated with an end user\'s session for this View (defined by the View\'s Channel Groupings).
+    channelGrouping :: (Core.Maybe Core.Text),
+    -- | A list of all custom dimensions associated with this activity.
+    customDimension :: (Core.Maybe [CustomDimension]),
+    -- | This will be set if @activity_type@ equals @ECOMMERCE@.
+    ecommerce :: (Core.Maybe EcommerceData),
+    -- | This field contains all the details pertaining to an event and will be set if @activity_type@ equals @EVENT@.
+    event :: (Core.Maybe EventData),
+    -- | This field contains a list of all the goals that were reached in this activity when @activity_type@ equals @GOAL@.
+    goals :: (Core.Maybe GoalSetData),
+    -- | The hostname from which the tracking request was made.
+    hostname :: (Core.Maybe Core.Text),
+    -- | For manual campaign tracking, it is the value of the utm/term campaign tracking parameter. For AdWords traffic, it contains the best matching targeting criteria. For the display network, where multiple targeting criteria could have caused the ad to show up, it returns the best matching targeting criteria as selected by Ads. This could be display/keyword, site placement, boomuserlist, user_interest, age, or gender. Otherwise its value is (not set).
+    keyword :: (Core.Maybe Core.Text),
+    -- | The first page in users\' sessions, or the landing page.
+    landingPagePath :: (Core.Maybe Core.Text),
+    -- | The type of referrals. For manual campaign tracking, it is the value of the utm_medium campaign tracking parameter. For AdWords autotagging, it is cpc. If users came from a search engine detected by Google Analytics, it is organic. If the referrer is not a search engine, it is referral. If users came directly to the property and document.referrer is empty, its value is (none).
+    medium :: (Core.Maybe Core.Text),
+    -- | This will be set if @activity_type@ equals @PAGEVIEW@. This field contains all the details about the visitor and the page that was visited.
+    pageview :: (Core.Maybe PageviewData),
+    -- | The source of referrals. For manual campaign tracking, it is the value of the utm_source campaign tracking parameter. For AdWords autotagging, it is google. If you use neither, it is the domain of the source (e.g., document.referrer) referring the users. It may also contain a port address. If users arrived without a referrer, its value is (direct).
+    source :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'Activity' with the minimum fields required to make a request.
+newActivity ::
+  Activity
+newActivity =
+  Activity
+    { activityTime = Core.Nothing,
+      activityType = Core.Nothing,
+      appview = Core.Nothing,
+      campaign = Core.Nothing,
+      channelGrouping = Core.Nothing,
+      customDimension = Core.Nothing,
+      ecommerce = Core.Nothing,
+      event = Core.Nothing,
+      goals = Core.Nothing,
+      hostname = Core.Nothing,
+      keyword = Core.Nothing,
+      landingPagePath = Core.Nothing,
+      medium = Core.Nothing,
+      pageview = Core.Nothing,
+      source = Core.Nothing
+    }
+
+instance Core.FromJSON Activity where
+  parseJSON =
+    Core.withObject
+      "Activity"
+      ( \o ->
+          Activity
+            Core.<$> (o Core..:? "activityTime")
+            Core.<*> (o Core..:? "activityType")
+            Core.<*> (o Core..:? "appview")
+            Core.<*> (o Core..:? "campaign")
+            Core.<*> (o Core..:? "channelGrouping")
+            Core.<*> (o Core..:? "customDimension")
+            Core.<*> (o Core..:? "ecommerce")
+            Core.<*> (o Core..:? "event")
+            Core.<*> (o Core..:? "goals")
+            Core.<*> (o Core..:? "hostname")
+            Core.<*> (o Core..:? "keyword")
+            Core.<*> (o Core..:? "landingPagePath")
+            Core.<*> (o Core..:? "medium")
+            Core.<*> (o Core..:? "pageview")
+            Core.<*> (o Core..:? "source")
+      )
+
+instance Core.ToJSON Activity where
+  toJSON Activity {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("activityTime" Core..=) Core.<$> activityTime,
+            ("activityType" Core..=) Core.<$> activityType,
+            ("appview" Core..=) Core.<$> appview,
+            ("campaign" Core..=) Core.<$> campaign,
+            ("channelGrouping" Core..=) Core.<$> channelGrouping,
+            ("customDimension" Core..=) Core.<$> customDimension,
+            ("ecommerce" Core..=) Core.<$> ecommerce,
+            ("event" Core..=) Core.<$> event,
+            ("goals" Core..=) Core.<$> goals,
+            ("hostname" Core..=) Core.<$> hostname,
+            ("keyword" Core..=) Core.<$> keyword,
+            ("landingPagePath" Core..=) Core.<$> landingPagePath,
+            ("medium" Core..=) Core.<$> medium,
+            ("pageview" Core..=) Core.<$> pageview,
+            ("source" Core..=) Core.<$> source
+          ]
+      )
+
+-- | Defines a cohort. A cohort is a group of users who share a common characteristic. For example, all users with the same acquisition date belong to the same cohort.
+--
+-- /See:/ 'newCohort' smart constructor.
+data Cohort = Cohort
+  { -- | This is used for @FIRST_VISIT_DATE@ cohort, the cohort selects users whose first visit date is between start date and end date defined in the DateRange. The date ranges should be aligned for cohort requests. If the request contains @ga:cohortNthDay@ it should be exactly one day long, if @ga:cohortNthWeek@ it should be aligned to the week boundary (starting at Sunday and ending Saturday), and for @ga:cohortNthMonth@ the date range should be aligned to the month (starting at the first and ending on the last day of the month). For LTV requests there are no such restrictions. You do not need to supply a date range for the @reportsRequest.dateRanges@ field.
+    dateRange :: (Core.Maybe DateRange),
+    -- | A unique name for the cohort. If not defined name will be auto-generated with values cohort_[1234...].
+    name :: (Core.Maybe Core.Text),
+    -- | Type of the cohort. The only supported type as of now is @FIRST_VISIT_DATE@. If this field is unspecified the cohort is treated as @FIRST_VISIT_DATE@ type cohort.
+    type' :: (Core.Maybe Cohort_Type)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'Cohort' with the minimum fields required to make a request.
+newCohort ::
+  Cohort
+newCohort =
+  Cohort
+    { dateRange = Core.Nothing,
+      name = Core.Nothing,
+      type' = Core.Nothing
+    }
+
+instance Core.FromJSON Cohort where
+  parseJSON =
+    Core.withObject
+      "Cohort"
+      ( \o ->
+          Cohort
+            Core.<$> (o Core..:? "dateRange")
+            Core.<*> (o Core..:? "name")
+            Core.<*> (o Core..:? "type")
+      )
+
+instance Core.ToJSON Cohort where
+  toJSON Cohort {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dateRange" Core..=) Core.<$> dateRange,
+            ("name" Core..=) Core.<$> name,
+            ("type" Core..=) Core.<$> type'
+          ]
+      )
+
+-- | Defines a cohort group. For example: \"cohortGroup\": { \"cohorts\": [{ \"name\": \"cohort 1\", \"type\": \"FIRST/VISIT/DATE\", \"dateRange\": { \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" } },{ \"name\": \"cohort 2\" \"type\": \"FIRST/VISIT/DATE\" \"dateRange\": { \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" } }] }
+--
+-- /See:/ 'newCohortGroup' smart constructor.
+data CohortGroup = CohortGroup
+  { -- | The definition for the cohort.
+    cohorts :: (Core.Maybe [Cohort]),
+    -- | Enable Life Time Value (LTV). LTV measures lifetime value for users acquired through different channels. Please see: <https://support.google.com/analytics/answer/6074676 Cohort Analysis> and <https://support.google.com/analytics/answer/6182550 Lifetime Value> If the value of lifetimeValue is false: - The metric values are similar to the values in the web interface cohort report. - The cohort definition date ranges must be aligned to the calendar week and month. i.e. while requesting @ga:cohortNthWeek@ the @startDate@ in the cohort definition should be a Sunday and the @endDate@ should be the following Saturday, and for @ga:cohortNthMonth@, the @startDate@ should be the 1st of the month and @endDate@ should be the last day of the month. When the lifetimeValue is true: - The metric values will correspond to the values in the web interface LifeTime value report. - The Lifetime Value report shows you how user value (Revenue) and engagement (Appviews, Goal Completions, Sessions, and Session Duration) grow during
+    -- the 90 days after a user is acquired. - The metrics are calculated as a cumulative average per user per the time increment. - The cohort definition date ranges need not be aligned to the calendar week and month boundaries. - The @viewId@ must be an <https://support.google.com/analytics/answer/2649553#WebVersusAppViews app view ID>
+    lifetimeValue :: (Core.Maybe Core.Bool)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'CohortGroup' with the minimum fields required to make a request.
+newCohortGroup ::
+  CohortGroup
+newCohortGroup =
+  CohortGroup {cohorts = Core.Nothing, lifetimeValue = Core.Nothing}
+
+instance Core.FromJSON CohortGroup where
+  parseJSON =
+    Core.withObject
+      "CohortGroup"
+      ( \o ->
+          CohortGroup
+            Core.<$> (o Core..:? "cohorts")
+            Core.<*> (o Core..:? "lifetimeValue")
+      )
+
+instance Core.ToJSON CohortGroup where
+  toJSON CohortGroup {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("cohorts" Core..=) Core.<$> cohorts,
+            ("lifetimeValue" Core..=) Core.<$> lifetimeValue
+          ]
+      )
+
+-- | Column headers.
+--
+-- /See:/ 'newColumnHeader' smart constructor.
+data ColumnHeader = ColumnHeader
+  { -- | The dimension names in the response.
+    dimensions :: (Core.Maybe [Core.Text]),
+    -- | Metric headers for the metrics in the response.
+    metricHeader :: (Core.Maybe MetricHeader)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ColumnHeader' with the minimum fields required to make a request.
+newColumnHeader ::
+  ColumnHeader
+newColumnHeader =
+  ColumnHeader
+    { dimensions = Core.Nothing,
+      metricHeader = Core.Nothing
+    }
+
+instance Core.FromJSON ColumnHeader where
+  parseJSON =
+    Core.withObject
+      "ColumnHeader"
+      ( \o ->
+          ColumnHeader
+            Core.<$> (o Core..:? "dimensions")
+            Core.<*> (o Core..:? "metricHeader")
+      )
+
+instance Core.ToJSON ColumnHeader where
+  toJSON ColumnHeader {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dimensions" Core..=) Core.<$> dimensions,
+            ("metricHeader" Core..=) Core.<$> metricHeader
+          ]
+      )
+
+-- | Custom dimension.
+--
+-- /See:/ 'newCustomDimension' smart constructor.
+data CustomDimension = CustomDimension
+  { -- | Slot number of custom dimension.
+    index :: (Core.Maybe Core.Int32),
+    -- | Value of the custom dimension. Default value (i.e. empty string) indicates clearing sesion\/visitor scope custom dimension value.
+    value :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'CustomDimension' with the minimum fields required to make a request.
+newCustomDimension ::
+  CustomDimension
+newCustomDimension =
+  CustomDimension {index = Core.Nothing, value = Core.Nothing}
+
+instance Core.FromJSON CustomDimension where
+  parseJSON =
+    Core.withObject
+      "CustomDimension"
+      ( \o ->
+          CustomDimension
+            Core.<$> (o Core..:? "index")
+            Core.<*> (o Core..:? "value")
+      )
+
+instance Core.ToJSON CustomDimension where
+  toJSON CustomDimension {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("index" Core..=) Core.<$> index,
+            ("value" Core..=) Core.<$> value
+          ]
+      )
+
+-- | A contiguous set of days: startDate, startDate + 1 day, ..., endDate. The start and end dates are specified in <https://en.wikipedia.org/wiki/ISO_8601 ISO8601> date format @YYYY-MM-DD@.
+--
+-- /See:/ 'newDateRange' smart constructor.
+data DateRange = DateRange
+  { -- | The end date for the query in the format @YYYY-MM-DD@.
+    endDate :: (Core.Maybe Core.Text),
+    -- | The start date for the query in the format @YYYY-MM-DD@.
+    startDate :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'DateRange' with the minimum fields required to make a request.
+newDateRange ::
+  DateRange
+newDateRange =
+  DateRange {endDate = Core.Nothing, startDate = Core.Nothing}
+
+instance Core.FromJSON DateRange where
+  parseJSON =
+    Core.withObject
+      "DateRange"
+      ( \o ->
+          DateRange
+            Core.<$> (o Core..:? "endDate")
+            Core.<*> (o Core..:? "startDate")
+      )
+
+instance Core.ToJSON DateRange where
+  toJSON DateRange {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("endDate" Core..=) Core.<$> endDate,
+            ("startDate" Core..=) Core.<$> startDate
+          ]
+      )
+
+-- | Used to return a list of metrics for a single DateRange \/ dimension combination
+--
+-- /See:/ 'newDateRangeValues' smart constructor.
+data DateRangeValues = DateRangeValues
+  { -- | The values of each pivot region.
+    pivotValueRegions :: (Core.Maybe [PivotValueRegion]),
+    -- | Each value corresponds to each Metric in the request.
+    values :: (Core.Maybe [Core.Text])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'DateRangeValues' with the minimum fields required to make a request.
+newDateRangeValues ::
+  DateRangeValues
+newDateRangeValues =
+  DateRangeValues
+    { pivotValueRegions = Core.Nothing,
+      values = Core.Nothing
+    }
+
+instance Core.FromJSON DateRangeValues where
+  parseJSON =
+    Core.withObject
+      "DateRangeValues"
+      ( \o ->
+          DateRangeValues
+            Core.<$> (o Core..:? "pivotValueRegions")
+            Core.<*> (o Core..:? "values")
+      )
+
+instance Core.ToJSON DateRangeValues where
+  toJSON DateRangeValues {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("pivotValueRegions" Core..=) Core.<$> pivotValueRegions,
+            ("values" Core..=) Core.<$> values
+          ]
+      )
+
+-- | <https://support.google.com/analytics/answer/1033861 Dimensions> are attributes of your data. For example, the dimension @ga:city@ indicates the city, for example, \"Paris\" or \"New York\", from which a session originates.
+--
+-- /See:/ 'newDimension' smart constructor.
+data Dimension = Dimension
+  { -- | If non-empty, we place dimension values into buckets after string to int64. Dimension values that are not the string representation of an integral value will be converted to zero. The bucket values have to be in increasing order. Each bucket is closed on the lower end, and open on the upper end. The \"first\" bucket includes all values less than the first boundary, the \"last\" bucket includes all values up to infinity. Dimension values that fall in a bucket get transformed to a new dimension value. For example, if one gives a list of \"0, 1, 3, 4, 7\", then we return the following buckets: - bucket #1: values \< 0, dimension value \"\<0\" - bucket #2: values in [0,1), dimension value \"0\" - bucket #3: values in [1,3), dimension value \"1-2\" - bucket #4: values in [3,4), dimension value \"3\" - bucket #5: values in [4,7), dimension value \"4-6\" - bucket #6: values >= 7, dimension value \"7+\" NOTE: If you are applying histogram mutation on any dimension, and using that dimension in sort, you will want to
+    -- use the sort type @HISTOGRAM_BUCKET@ for that purpose. Without that the dimension values will be sorted according to dictionary (lexicographic) order. For example the ascending dictionary order is: \"\<50\", \"1001+\", \"121-1000\", \"50-120\" And the ascending @HISTOGRAM_BUCKET@ order is: \"\<50\", \"50-120\", \"121-1000\", \"1001+\" The client has to explicitly request @\"orderType\": \"HISTOGRAM_BUCKET\"@ for a histogram-mutated dimension.
+    histogramBuckets :: (Core.Maybe [Core.Int64]),
+    -- | Name of the dimension to fetch, for example @ga:browser@.
+    name :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'Dimension' with the minimum fields required to make a request.
+newDimension ::
+  Dimension
+newDimension =
+  Dimension {histogramBuckets = Core.Nothing, name = Core.Nothing}
+
+instance Core.FromJSON Dimension where
+  parseJSON =
+    Core.withObject
+      "Dimension"
+      ( \o ->
+          Dimension
+            Core.<$> ( o
+                         Core..:? "histogramBuckets"
+                         Core.<&> Core.fmap (Core.fmap Core.fromAsText)
+                     )
+            Core.<*> (o Core..:? "name")
+      )
+
+instance Core.ToJSON Dimension where
+  toJSON Dimension {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("histogramBuckets" Core..=)
+              Core.. Core.fmap Core.AsText
+              Core.<$> histogramBuckets,
+            ("name" Core..=) Core.<$> name
+          ]
+      )
+
+-- | Dimension filter specifies the filtering options on a dimension.
+--
+-- /See:/ 'newDimensionFilter' smart constructor.
+data DimensionFilter = DimensionFilter
+  { -- | Should the match be case sensitive? Default is false.
+    caseSensitive :: (Core.Maybe Core.Bool),
+    -- | The dimension to filter on. A DimensionFilter must contain a dimension.
+    dimensionName :: (Core.Maybe Core.Text),
+    -- | Strings or regular expression to match against. Only the first value of the list is used for comparison unless the operator is @IN_LIST@. If @IN_LIST@ operator, then the entire list is used to filter the dimensions as explained in the description of the @IN_LIST@ operator.
+    expressions :: (Core.Maybe [Core.Text]),
+    -- | Logical @NOT@ operator. If this boolean is set to true, then the matching dimension values will be excluded in the report. The default is false.
+    not :: (Core.Maybe Core.Bool),
+    -- | How to match the dimension to the expression. The default is REGEXP.
+    operator :: (Core.Maybe DimensionFilter_Operator)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'DimensionFilter' with the minimum fields required to make a request.
+newDimensionFilter ::
+  DimensionFilter
+newDimensionFilter =
+  DimensionFilter
+    { caseSensitive = Core.Nothing,
+      dimensionName = Core.Nothing,
+      expressions = Core.Nothing,
+      not = Core.Nothing,
+      operator = Core.Nothing
+    }
+
+instance Core.FromJSON DimensionFilter where
+  parseJSON =
+    Core.withObject
+      "DimensionFilter"
+      ( \o ->
+          DimensionFilter
+            Core.<$> (o Core..:? "caseSensitive")
+            Core.<*> (o Core..:? "dimensionName")
+            Core.<*> (o Core..:? "expressions")
+            Core.<*> (o Core..:? "not")
+            Core.<*> (o Core..:? "operator")
+      )
+
+instance Core.ToJSON DimensionFilter where
+  toJSON DimensionFilter {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("caseSensitive" Core..=) Core.<$> caseSensitive,
+            ("dimensionName" Core..=) Core.<$> dimensionName,
+            ("expressions" Core..=) Core.<$> expressions,
+            ("not" Core..=) Core.<$> not,
+            ("operator" Core..=) Core.<$> operator
+          ]
+      )
+
+-- | A group of dimension filters. Set the operator value to specify how the filters are logically combined.
+--
+-- /See:/ 'newDimensionFilterClause' smart constructor.
+data DimensionFilterClause = DimensionFilterClause
+  { -- | The repeated set of filters. They are logically combined based on the operator specified.
+    filters :: (Core.Maybe [DimensionFilter]),
+    -- | The operator for combining multiple dimension filters. If unspecified, it is treated as an @OR@.
+    operator :: (Core.Maybe DimensionFilterClause_Operator)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'DimensionFilterClause' with the minimum fields required to make a request.
+newDimensionFilterClause ::
+  DimensionFilterClause
+newDimensionFilterClause =
+  DimensionFilterClause
+    { filters = Core.Nothing,
+      operator = Core.Nothing
+    }
+
+instance Core.FromJSON DimensionFilterClause where
+  parseJSON =
+    Core.withObject
+      "DimensionFilterClause"
+      ( \o ->
+          DimensionFilterClause
+            Core.<$> (o Core..:? "filters")
+            Core.<*> (o Core..:? "operator")
+      )
+
+instance Core.ToJSON DimensionFilterClause where
+  toJSON DimensionFilterClause {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("filters" Core..=) Core.<$> filters,
+            ("operator" Core..=) Core.<$> operator
+          ]
+      )
+
+-- | Dynamic segment definition for defining the segment within the request. A segment can select users, sessions or both.
+--
+-- /See:/ 'newDynamicSegment' smart constructor.
+data DynamicSegment = DynamicSegment
+  { -- | The name of the dynamic segment.
+    name :: (Core.Maybe Core.Text),
+    -- | Session Segment to select sessions to include in the segment.
+    sessionSegment :: (Core.Maybe SegmentDefinition),
+    -- | User Segment to select users to include in the segment.
+    userSegment :: (Core.Maybe SegmentDefinition)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'DynamicSegment' with the minimum fields required to make a request.
+newDynamicSegment ::
+  DynamicSegment
+newDynamicSegment =
+  DynamicSegment
+    { name = Core.Nothing,
+      sessionSegment = Core.Nothing,
+      userSegment = Core.Nothing
+    }
+
+instance Core.FromJSON DynamicSegment where
+  parseJSON =
+    Core.withObject
+      "DynamicSegment"
+      ( \o ->
+          DynamicSegment
+            Core.<$> (o Core..:? "name")
+            Core.<*> (o Core..:? "sessionSegment")
+            Core.<*> (o Core..:? "userSegment")
+      )
+
+instance Core.ToJSON DynamicSegment where
+  toJSON DynamicSegment {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("name" Core..=) Core.<$> name,
+            ("sessionSegment" Core..=) Core.<$> sessionSegment,
+            ("userSegment" Core..=) Core.<$> userSegment
+          ]
+      )
+
+-- | E-commerce details associated with the user activity.
+--
+-- /See:/ 'newEcommerceData' smart constructor.
+data EcommerceData = EcommerceData
+  { -- | Action associated with this e-commerce action.
+    actionType :: (Core.Maybe EcommerceData_ActionType),
+    -- | The type of this e-commerce activity.
+    ecommerceType :: (Core.Maybe EcommerceData_EcommerceType),
+    -- | Details of the products in this transaction.
+    products :: (Core.Maybe [ProductData]),
+    -- | Transaction details of this e-commerce action.
+    transaction :: (Core.Maybe TransactionData)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'EcommerceData' with the minimum fields required to make a request.
+newEcommerceData ::
+  EcommerceData
+newEcommerceData =
+  EcommerceData
+    { actionType = Core.Nothing,
+      ecommerceType = Core.Nothing,
+      products = Core.Nothing,
+      transaction = Core.Nothing
+    }
+
+instance Core.FromJSON EcommerceData where
+  parseJSON =
+    Core.withObject
+      "EcommerceData"
+      ( \o ->
+          EcommerceData
+            Core.<$> (o Core..:? "actionType")
+            Core.<*> (o Core..:? "ecommerceType")
+            Core.<*> (o Core..:? "products")
+            Core.<*> (o Core..:? "transaction")
+      )
+
+instance Core.ToJSON EcommerceData where
+  toJSON EcommerceData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("actionType" Core..=) Core.<$> actionType,
+            ("ecommerceType" Core..=) Core.<$> ecommerceType,
+            ("products" Core..=) Core.<$> products,
+            ("transaction" Core..=) Core.<$> transaction
+          ]
+      )
+
+-- | Represents all the details pertaining to an event.
+--
+-- /See:/ 'newEventData' smart constructor.
+data EventData = EventData
+  { -- | Type of interaction with the object. Eg: \'play\'.
+    eventAction :: (Core.Maybe Core.Text),
+    -- | The object on the page that was interacted with. Eg: \'Video\'.
+    eventCategory :: (Core.Maybe Core.Text),
+    -- | Number of such events in this activity.
+    eventCount :: (Core.Maybe Core.Int64),
+    -- | Label attached with the event.
+    eventLabel :: (Core.Maybe Core.Text),
+    -- | Numeric value associated with the event.
+    eventValue :: (Core.Maybe Core.Int64)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'EventData' with the minimum fields required to make a request.
+newEventData ::
+  EventData
+newEventData =
+  EventData
+    { eventAction = Core.Nothing,
+      eventCategory = Core.Nothing,
+      eventCount = Core.Nothing,
+      eventLabel = Core.Nothing,
+      eventValue = Core.Nothing
+    }
+
+instance Core.FromJSON EventData where
+  parseJSON =
+    Core.withObject
+      "EventData"
+      ( \o ->
+          EventData
+            Core.<$> (o Core..:? "eventAction")
+            Core.<*> (o Core..:? "eventCategory")
+            Core.<*> (o Core..:? "eventCount" Core.<&> Core.fmap Core.fromAsText)
+            Core.<*> (o Core..:? "eventLabel")
+            Core.<*> (o Core..:? "eventValue" Core.<&> Core.fmap Core.fromAsText)
+      )
+
+instance Core.ToJSON EventData where
+  toJSON EventData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("eventAction" Core..=) Core.<$> eventAction,
+            ("eventCategory" Core..=) Core.<$> eventCategory,
+            ("eventCount" Core..=) Core.. Core.AsText Core.<$> eventCount,
+            ("eventLabel" Core..=) Core.<$> eventLabel,
+            ("eventValue" Core..=) Core.. Core.AsText Core.<$> eventValue
+          ]
+      )
+
+-- | The batch request containing multiple report request.
+--
+-- /See:/ 'newGetReportsRequest' smart constructor.
+data GetReportsRequest = GetReportsRequest
+  { -- | Requests, each request will have a separate response. There can be a maximum of 5 requests. All requests should have the same @dateRanges@, @viewId@, @segments@, @samplingLevel@, and @cohortGroup@.
+    reportRequests :: (Core.Maybe [ReportRequest]),
+    -- | Enables </analytics/devguides/reporting/core/v4/limits-quotas#analytics_reporting_api_v4 resource based quotas>, (defaults to @False@). If this field is set to @True@ the per view (profile) quotas are governed by the computational cost of the request. Note that using cost based quotas will higher enable sampling rates. (10 Million for @SMALL@, 100M for @LARGE@. See the </analytics/devguides/reporting/core/v4/limits-quotas#analytics_reporting_api_v4 limits and quotas documentation> for details.
+    useResourceQuotas :: (Core.Maybe Core.Bool)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'GetReportsRequest' with the minimum fields required to make a request.
+newGetReportsRequest ::
+  GetReportsRequest
+newGetReportsRequest =
+  GetReportsRequest
+    { reportRequests = Core.Nothing,
+      useResourceQuotas = Core.Nothing
+    }
+
+instance Core.FromJSON GetReportsRequest where
+  parseJSON =
+    Core.withObject
+      "GetReportsRequest"
+      ( \o ->
+          GetReportsRequest
+            Core.<$> (o Core..:? "reportRequests")
+            Core.<*> (o Core..:? "useResourceQuotas")
+      )
+
+instance Core.ToJSON GetReportsRequest where
+  toJSON GetReportsRequest {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("reportRequests" Core..=) Core.<$> reportRequests,
+            ("useResourceQuotas" Core..=) Core.<$> useResourceQuotas
+          ]
+      )
+
+-- | The main response class which holds the reports from the Reporting API @batchGet@ call.
+--
+-- /See:/ 'newGetReportsResponse' smart constructor.
+data GetReportsResponse = GetReportsResponse
+  { -- | The amount of resource quota tokens deducted to execute the query. Includes all responses.
+    queryCost :: (Core.Maybe Core.Int32),
+    -- | Responses corresponding to each of the request.
+    reports :: (Core.Maybe [Report]),
+    -- | The amount of resource quota remaining for the property.
+    resourceQuotasRemaining :: (Core.Maybe ResourceQuotasRemaining)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'GetReportsResponse' with the minimum fields required to make a request.
+newGetReportsResponse ::
+  GetReportsResponse
+newGetReportsResponse =
+  GetReportsResponse
+    { queryCost = Core.Nothing,
+      reports = Core.Nothing,
+      resourceQuotasRemaining = Core.Nothing
+    }
+
+instance Core.FromJSON GetReportsResponse where
+  parseJSON =
+    Core.withObject
+      "GetReportsResponse"
+      ( \o ->
+          GetReportsResponse
+            Core.<$> (o Core..:? "queryCost")
+            Core.<*> (o Core..:? "reports")
+            Core.<*> (o Core..:? "resourceQuotasRemaining")
+      )
+
+instance Core.ToJSON GetReportsResponse where
+  toJSON GetReportsResponse {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("queryCost" Core..=) Core.<$> queryCost,
+            ("reports" Core..=) Core.<$> reports,
+            ("resourceQuotasRemaining" Core..=)
+              Core.<$> resourceQuotasRemaining
+          ]
+      )
+
+-- | Represents all the details pertaining to a goal.
+--
+-- /See:/ 'newGoalData' smart constructor.
+data GoalData = GoalData
+  { -- | URL of the page where this goal was completed.
+    goalCompletionLocation :: (Core.Maybe Core.Text),
+    -- | Total number of goal completions in this activity.
+    goalCompletions :: (Core.Maybe Core.Int64),
+    -- | This identifies the goal as configured for the profile.
+    goalIndex :: (Core.Maybe Core.Int32),
+    -- | Name of the goal.
+    goalName :: (Core.Maybe Core.Text),
+    -- | URL of the page one step prior to the goal completion.
+    goalPreviousStep1 :: (Core.Maybe Core.Text),
+    -- | URL of the page two steps prior to the goal completion.
+    goalPreviousStep2 :: (Core.Maybe Core.Text),
+    -- | URL of the page three steps prior to the goal completion.
+    goalPreviousStep3 :: (Core.Maybe Core.Text),
+    -- | Value in this goal.
+    goalValue :: (Core.Maybe Core.Double)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'GoalData' with the minimum fields required to make a request.
+newGoalData ::
+  GoalData
+newGoalData =
+  GoalData
+    { goalCompletionLocation = Core.Nothing,
+      goalCompletions = Core.Nothing,
+      goalIndex = Core.Nothing,
+      goalName = Core.Nothing,
+      goalPreviousStep1 = Core.Nothing,
+      goalPreviousStep2 = Core.Nothing,
+      goalPreviousStep3 = Core.Nothing,
+      goalValue = Core.Nothing
+    }
+
+instance Core.FromJSON GoalData where
+  parseJSON =
+    Core.withObject
+      "GoalData"
+      ( \o ->
+          GoalData
+            Core.<$> (o Core..:? "goalCompletionLocation")
+            Core.<*> (o Core..:? "goalCompletions" Core.<&> Core.fmap Core.fromAsText)
+            Core.<*> (o Core..:? "goalIndex")
+            Core.<*> (o Core..:? "goalName")
+            Core.<*> (o Core..:? "goalPreviousStep1")
+            Core.<*> (o Core..:? "goalPreviousStep2")
+            Core.<*> (o Core..:? "goalPreviousStep3")
+            Core.<*> (o Core..:? "goalValue")
+      )
+
+instance Core.ToJSON GoalData where
+  toJSON GoalData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("goalCompletionLocation" Core..=)
+              Core.<$> goalCompletionLocation,
+            ("goalCompletions" Core..=)
+              Core.. Core.AsText
+              Core.<$> goalCompletions,
+            ("goalIndex" Core..=) Core.<$> goalIndex,
+            ("goalName" Core..=) Core.<$> goalName,
+            ("goalPreviousStep1" Core..=) Core.<$> goalPreviousStep1,
+            ("goalPreviousStep2" Core..=) Core.<$> goalPreviousStep2,
+            ("goalPreviousStep3" Core..=) Core.<$> goalPreviousStep3,
+            ("goalValue" Core..=) Core.<$> goalValue
+          ]
+      )
+
+-- | Represents a set of goals that were reached in an activity.
+--
+-- /See:/ 'newGoalSetData' smart constructor.
+newtype GoalSetData = GoalSetData
+  { -- | All the goals that were reached in the current activity.
+    goals :: (Core.Maybe [GoalData])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'GoalSetData' with the minimum fields required to make a request.
+newGoalSetData ::
+  GoalSetData
+newGoalSetData = GoalSetData {goals = Core.Nothing}
+
+instance Core.FromJSON GoalSetData where
+  parseJSON =
+    Core.withObject
+      "GoalSetData"
+      (\o -> GoalSetData Core.<$> (o Core..:? "goals"))
+
+instance Core.ToJSON GoalSetData where
+  toJSON GoalSetData {..} =
+    Core.object (Core.catMaybes [("goals" Core..=) Core.<$> goals])
+
+-- | <https://support.google.com/analytics/answer/1033861 Metrics> are the quantitative measurements. For example, the metric @ga:users@ indicates the total number of users for the requested time period.
+--
+-- /See:/ 'newMetric' smart constructor.
+data Metric = Metric
+  { -- | An alias for the metric expression is an alternate name for the expression. The alias can be used for filtering and sorting. This field is optional and is useful if the expression is not a single metric but a complex expression which cannot be used in filtering and sorting. The alias is also used in the response column header.
+    alias :: (Core.Maybe Core.Text),
+    -- | A metric expression in the request. An expression is constructed from one or more metrics and numbers. Accepted operators include: Plus (+), Minus (-), Negation (Unary -), Divided by (\/), Multiplied by (*), Parenthesis, Positive cardinal numbers (0-9), can include decimals and is limited to 1024 characters. Example @ga:totalRefunds\/ga:users@, in most cases the metric expression is just a single metric name like @ga:users@. Adding mixed @MetricType@ (E.g., @CURRENCY@ + @PERCENTAGE@) metrics will result in unexpected results.
+    expression :: (Core.Maybe Core.Text),
+    -- | Specifies how the metric expression should be formatted, for example @INTEGER@.
+    formattingType :: (Core.Maybe Metric_FormattingType)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'Metric' with the minimum fields required to make a request.
+newMetric ::
+  Metric
+newMetric =
+  Metric
+    { alias = Core.Nothing,
+      expression = Core.Nothing,
+      formattingType = Core.Nothing
+    }
+
+instance Core.FromJSON Metric where
+  parseJSON =
+    Core.withObject
+      "Metric"
+      ( \o ->
+          Metric
+            Core.<$> (o Core..:? "alias")
+            Core.<*> (o Core..:? "expression")
+            Core.<*> (o Core..:? "formattingType")
+      )
+
+instance Core.ToJSON Metric where
+  toJSON Metric {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("alias" Core..=) Core.<$> alias,
+            ("expression" Core..=) Core.<$> expression,
+            ("formattingType" Core..=) Core.<$> formattingType
+          ]
+      )
+
+-- | MetricFilter specifies the filter on a metric.
+--
+-- /See:/ 'newMetricFilter' smart constructor.
+data MetricFilter = MetricFilter
+  { -- | The value to compare against.
+    comparisonValue :: (Core.Maybe Core.Text),
+    -- | The metric that will be filtered on. A metricFilter must contain a metric name. A metric name can be an alias earlier defined as a metric or it can also be a metric expression.
+    metricName :: (Core.Maybe Core.Text),
+    -- | Logical @NOT@ operator. If this boolean is set to true, then the matching metric values will be excluded in the report. The default is false.
+    not :: (Core.Maybe Core.Bool),
+    -- | Is the metric @EQUAL@, @LESS_THAN@ or @GREATER_THAN@ the comparisonValue, the default is @EQUAL@. If the operator is @IS_MISSING@, checks if the metric is missing and would ignore the comparisonValue.
+    operator :: (Core.Maybe MetricFilter_Operator)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'MetricFilter' with the minimum fields required to make a request.
+newMetricFilter ::
+  MetricFilter
+newMetricFilter =
+  MetricFilter
+    { comparisonValue = Core.Nothing,
+      metricName = Core.Nothing,
+      not = Core.Nothing,
+      operator = Core.Nothing
+    }
+
+instance Core.FromJSON MetricFilter where
+  parseJSON =
+    Core.withObject
+      "MetricFilter"
+      ( \o ->
+          MetricFilter
+            Core.<$> (o Core..:? "comparisonValue")
+            Core.<*> (o Core..:? "metricName")
+            Core.<*> (o Core..:? "not")
+            Core.<*> (o Core..:? "operator")
+      )
+
+instance Core.ToJSON MetricFilter where
+  toJSON MetricFilter {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("comparisonValue" Core..=) Core.<$> comparisonValue,
+            ("metricName" Core..=) Core.<$> metricName,
+            ("not" Core..=) Core.<$> not,
+            ("operator" Core..=) Core.<$> operator
+          ]
+      )
+
+-- | Represents a group of metric filters. Set the operator value to specify how the filters are logically combined.
+--
+-- /See:/ 'newMetricFilterClause' smart constructor.
+data MetricFilterClause = MetricFilterClause
+  { -- | The repeated set of filters. They are logically combined based on the operator specified.
+    filters :: (Core.Maybe [MetricFilter]),
+    -- | The operator for combining multiple metric filters. If unspecified, it is treated as an @OR@.
+    operator :: (Core.Maybe MetricFilterClause_Operator)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'MetricFilterClause' with the minimum fields required to make a request.
+newMetricFilterClause ::
+  MetricFilterClause
+newMetricFilterClause =
+  MetricFilterClause
+    { filters = Core.Nothing,
+      operator = Core.Nothing
+    }
+
+instance Core.FromJSON MetricFilterClause where
+  parseJSON =
+    Core.withObject
+      "MetricFilterClause"
+      ( \o ->
+          MetricFilterClause
+            Core.<$> (o Core..:? "filters")
+            Core.<*> (o Core..:? "operator")
+      )
+
+instance Core.ToJSON MetricFilterClause where
+  toJSON MetricFilterClause {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("filters" Core..=) Core.<$> filters,
+            ("operator" Core..=) Core.<$> operator
+          ]
+      )
+
+-- | The headers for the metrics.
+--
+-- /See:/ 'newMetricHeader' smart constructor.
+data MetricHeader = MetricHeader
+  { -- | Headers for the metrics in the response.
+    metricHeaderEntries :: (Core.Maybe [MetricHeaderEntry]),
+    -- | Headers for the pivots in the response.
+    pivotHeaders :: (Core.Maybe [PivotHeader])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'MetricHeader' with the minimum fields required to make a request.
+newMetricHeader ::
+  MetricHeader
+newMetricHeader =
+  MetricHeader
+    { metricHeaderEntries = Core.Nothing,
+      pivotHeaders = Core.Nothing
+    }
+
+instance Core.FromJSON MetricHeader where
+  parseJSON =
+    Core.withObject
+      "MetricHeader"
+      ( \o ->
+          MetricHeader
+            Core.<$> (o Core..:? "metricHeaderEntries")
+            Core.<*> (o Core..:? "pivotHeaders")
+      )
+
+instance Core.ToJSON MetricHeader where
+  toJSON MetricHeader {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("metricHeaderEntries" Core..=) Core.<$> metricHeaderEntries,
+            ("pivotHeaders" Core..=) Core.<$> pivotHeaders
+          ]
+      )
+
+-- | Header for the metrics.
+--
+-- /See:/ 'newMetricHeaderEntry' smart constructor.
+data MetricHeaderEntry = MetricHeaderEntry
+  { -- | The name of the header.
+    name :: (Core.Maybe Core.Text),
+    -- | The type of the metric, for example @INTEGER@.
+    type' :: (Core.Maybe MetricHeaderEntry_Type)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'MetricHeaderEntry' with the minimum fields required to make a request.
+newMetricHeaderEntry ::
+  MetricHeaderEntry
+newMetricHeaderEntry =
+  MetricHeaderEntry {name = Core.Nothing, type' = Core.Nothing}
+
+instance Core.FromJSON MetricHeaderEntry where
+  parseJSON =
+    Core.withObject
+      "MetricHeaderEntry"
+      ( \o ->
+          MetricHeaderEntry
+            Core.<$> (o Core..:? "name")
+            Core.<*> (o Core..:? "type")
+      )
+
+instance Core.ToJSON MetricHeaderEntry where
+  toJSON MetricHeaderEntry {..} =
+    Core.object
+      ( Core.catMaybes
+          [("name" Core..=) Core.<$> name, ("type" Core..=) Core.<$> type']
+      )
+
+-- | A list of segment filters in the @OR@ group are combined with the logical OR operator.
+--
+-- /See:/ 'newOrFiltersForSegment' smart constructor.
+newtype OrFiltersForSegment = OrFiltersForSegment
+  { -- | List of segment filters to be combined with a @OR@ operator.
+    segmentFilterClauses :: (Core.Maybe [SegmentFilterClause])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'OrFiltersForSegment' with the minimum fields required to make a request.
+newOrFiltersForSegment ::
+  OrFiltersForSegment
+newOrFiltersForSegment =
+  OrFiltersForSegment {segmentFilterClauses = Core.Nothing}
+
+instance Core.FromJSON OrFiltersForSegment where
+  parseJSON =
+    Core.withObject
+      "OrFiltersForSegment"
+      ( \o ->
+          OrFiltersForSegment Core.<$> (o Core..:? "segmentFilterClauses")
+      )
+
+instance Core.ToJSON OrFiltersForSegment where
+  toJSON OrFiltersForSegment {..} =
+    Core.object
+      ( Core.catMaybes
+          [("segmentFilterClauses" Core..=) Core.<$> segmentFilterClauses]
+      )
+
+-- | Specifies the sorting options.
+--
+-- /See:/ 'newOrderBy' smart constructor.
+data OrderBy = OrderBy
+  { -- | The field which to sort by. The default sort order is ascending. Example: @ga:browser@. Note, that you can only specify one field for sort here. For example, @ga:browser, ga:city@ is not valid.
+    fieldName :: (Core.Maybe Core.Text),
+    -- | The order type. The default orderType is @VALUE@.
+    orderType :: (Core.Maybe OrderBy_OrderType),
+    -- | The sorting order for the field.
+    sortOrder :: (Core.Maybe OrderBy_SortOrder)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'OrderBy' with the minimum fields required to make a request.
+newOrderBy ::
+  OrderBy
+newOrderBy =
+  OrderBy
+    { fieldName = Core.Nothing,
+      orderType = Core.Nothing,
+      sortOrder = Core.Nothing
+    }
+
+instance Core.FromJSON OrderBy where
+  parseJSON =
+    Core.withObject
+      "OrderBy"
+      ( \o ->
+          OrderBy
+            Core.<$> (o Core..:? "fieldName")
+            Core.<*> (o Core..:? "orderType")
+            Core.<*> (o Core..:? "sortOrder")
+      )
+
+instance Core.ToJSON OrderBy where
+  toJSON OrderBy {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("fieldName" Core..=) Core.<$> fieldName,
+            ("orderType" Core..=) Core.<$> orderType,
+            ("sortOrder" Core..=) Core.<$> sortOrder
+          ]
+      )
+
+-- | Represents details collected when the visitor views a page.
+--
+-- /See:/ 'newPageviewData' smart constructor.
+data PageviewData = PageviewData
+  { -- | The URL of the page that the visitor viewed.
+    pagePath :: (Core.Maybe Core.Text),
+    -- | The title of the page that the visitor viewed.
+    pageTitle :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'PageviewData' with the minimum fields required to make a request.
+newPageviewData ::
+  PageviewData
+newPageviewData =
+  PageviewData {pagePath = Core.Nothing, pageTitle = Core.Nothing}
+
+instance Core.FromJSON PageviewData where
+  parseJSON =
+    Core.withObject
+      "PageviewData"
+      ( \o ->
+          PageviewData
+            Core.<$> (o Core..:? "pagePath")
+            Core.<*> (o Core..:? "pageTitle")
+      )
+
+instance Core.ToJSON PageviewData where
+  toJSON PageviewData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("pagePath" Core..=) Core.<$> pagePath,
+            ("pageTitle" Core..=) Core.<$> pageTitle
+          ]
+      )
+
+-- | The Pivot describes the pivot section in the request. The Pivot helps rearrange the information in the table for certain reports by pivoting your data on a second dimension.
+--
+-- /See:/ 'newPivot' smart constructor.
+data Pivot = Pivot
+  { -- | DimensionFilterClauses are logically combined with an @AND@ operator: only data that is included by all these DimensionFilterClauses contributes to the values in this pivot region. Dimension filters can be used to restrict the columns shown in the pivot region. For example if you have @ga:browser@ as the requested dimension in the pivot region, and you specify key filters to restrict @ga:browser@ to only \"IE\" or \"Firefox\", then only those two browsers would show up as columns.
+    dimensionFilterClauses :: (Core.Maybe [DimensionFilterClause]),
+    -- | A list of dimensions to show as pivot columns. A Pivot can have a maximum of 4 dimensions. Pivot dimensions are part of the restriction on the total number of dimensions allowed in the request.
+    dimensions :: (Core.Maybe [Dimension]),
+    -- | Specifies the maximum number of groups to return. The default value is 10, also the maximum value is 1,000.
+    maxGroupCount :: (Core.Maybe Core.Int32),
+    -- | The pivot metrics. Pivot metrics are part of the restriction on total number of metrics allowed in the request.
+    metrics :: (Core.Maybe [Metric]),
+    -- | If k metrics were requested, then the response will contain some data-dependent multiple of k columns in the report. E.g., if you pivoted on the dimension @ga:browser@ then you\'d get k columns for \"Firefox\", k columns for \"IE\", k columns for \"Chrome\", etc. The ordering of the groups of columns is determined by descending order of \"total\" for the first of the k values. Ties are broken by lexicographic ordering of the first pivot dimension, then lexicographic ordering of the second pivot dimension, and so on. E.g., if the totals for the first value for Firefox, IE, and Chrome were 8, 2, 8, respectively, the order of columns would be Chrome, Firefox, IE. The following let you choose which of the groups of k columns are included in the response.
+    startGroup :: (Core.Maybe Core.Int32)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'Pivot' with the minimum fields required to make a request.
+newPivot ::
+  Pivot
+newPivot =
+  Pivot
+    { dimensionFilterClauses = Core.Nothing,
+      dimensions = Core.Nothing,
+      maxGroupCount = Core.Nothing,
+      metrics = Core.Nothing,
+      startGroup = Core.Nothing
+    }
+
+instance Core.FromJSON Pivot where
+  parseJSON =
+    Core.withObject
+      "Pivot"
+      ( \o ->
+          Pivot
+            Core.<$> (o Core..:? "dimensionFilterClauses")
+            Core.<*> (o Core..:? "dimensions")
+            Core.<*> (o Core..:? "maxGroupCount")
+            Core.<*> (o Core..:? "metrics")
+            Core.<*> (o Core..:? "startGroup")
+      )
+
+instance Core.ToJSON Pivot where
+  toJSON Pivot {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dimensionFilterClauses" Core..=)
+              Core.<$> dimensionFilterClauses,
+            ("dimensions" Core..=) Core.<$> dimensions,
+            ("maxGroupCount" Core..=) Core.<$> maxGroupCount,
+            ("metrics" Core..=) Core.<$> metrics,
+            ("startGroup" Core..=) Core.<$> startGroup
+          ]
+      )
+
+-- | The headers for each of the pivot sections defined in the request.
+--
+-- /See:/ 'newPivotHeader' smart constructor.
+data PivotHeader = PivotHeader
+  { -- | A single pivot section header.
+    pivotHeaderEntries :: (Core.Maybe [PivotHeaderEntry]),
+    -- | The total number of groups for this pivot.
+    totalPivotGroupsCount :: (Core.Maybe Core.Int32)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'PivotHeader' with the minimum fields required to make a request.
+newPivotHeader ::
+  PivotHeader
+newPivotHeader =
+  PivotHeader
+    { pivotHeaderEntries = Core.Nothing,
+      totalPivotGroupsCount = Core.Nothing
+    }
+
+instance Core.FromJSON PivotHeader where
+  parseJSON =
+    Core.withObject
+      "PivotHeader"
+      ( \o ->
+          PivotHeader
+            Core.<$> (o Core..:? "pivotHeaderEntries")
+            Core.<*> (o Core..:? "totalPivotGroupsCount")
+      )
+
+instance Core.ToJSON PivotHeader where
+  toJSON PivotHeader {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("pivotHeaderEntries" Core..=) Core.<$> pivotHeaderEntries,
+            ("totalPivotGroupsCount" Core..=) Core.<$> totalPivotGroupsCount
+          ]
+      )
+
+-- | The headers for the each of the metric column corresponding to the metrics requested in the pivots section of the response.
+--
+-- /See:/ 'newPivotHeaderEntry' smart constructor.
+data PivotHeaderEntry = PivotHeaderEntry
+  { -- | The name of the dimensions in the pivot response.
+    dimensionNames :: (Core.Maybe [Core.Text]),
+    -- | The values for the dimensions in the pivot.
+    dimensionValues :: (Core.Maybe [Core.Text]),
+    -- | The metric header for the metric in the pivot.
+    metric :: (Core.Maybe MetricHeaderEntry)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'PivotHeaderEntry' with the minimum fields required to make a request.
+newPivotHeaderEntry ::
+  PivotHeaderEntry
+newPivotHeaderEntry =
+  PivotHeaderEntry
+    { dimensionNames = Core.Nothing,
+      dimensionValues = Core.Nothing,
+      metric = Core.Nothing
+    }
+
+instance Core.FromJSON PivotHeaderEntry where
+  parseJSON =
+    Core.withObject
+      "PivotHeaderEntry"
+      ( \o ->
+          PivotHeaderEntry
+            Core.<$> (o Core..:? "dimensionNames")
+            Core.<*> (o Core..:? "dimensionValues")
+            Core.<*> (o Core..:? "metric")
+      )
+
+instance Core.ToJSON PivotHeaderEntry where
+  toJSON PivotHeaderEntry {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dimensionNames" Core..=) Core.<$> dimensionNames,
+            ("dimensionValues" Core..=) Core.<$> dimensionValues,
+            ("metric" Core..=) Core.<$> metric
+          ]
+      )
+
+-- | The metric values in the pivot region.
+--
+-- /See:/ 'newPivotValueRegion' smart constructor.
+newtype PivotValueRegion = PivotValueRegion
+  { -- | The values of the metrics in each of the pivot regions.
+    values :: (Core.Maybe [Core.Text])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'PivotValueRegion' with the minimum fields required to make a request.
+newPivotValueRegion ::
+  PivotValueRegion
+newPivotValueRegion = PivotValueRegion {values = Core.Nothing}
+
+instance Core.FromJSON PivotValueRegion where
+  parseJSON =
+    Core.withObject
+      "PivotValueRegion"
+      (\o -> PivotValueRegion Core.<$> (o Core..:? "values"))
+
+instance Core.ToJSON PivotValueRegion where
+  toJSON PivotValueRegion {..} =
+    Core.object (Core.catMaybes [("values" Core..=) Core.<$> values])
+
+-- | Details of the products in an e-commerce transaction.
+--
+-- /See:/ 'newProductData' smart constructor.
+data ProductData = ProductData
+  { -- | The total revenue from purchased product items.
+    itemRevenue :: (Core.Maybe Core.Double),
+    -- | The product name, supplied by the e-commerce tracking application, for the purchased items.
+    productName :: (Core.Maybe Core.Text),
+    -- | Total number of this product units in the transaction.
+    productQuantity :: (Core.Maybe Core.Int64),
+    -- | Unique code that represents the product.
+    productSku :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ProductData' with the minimum fields required to make a request.
+newProductData ::
+  ProductData
+newProductData =
+  ProductData
+    { itemRevenue = Core.Nothing,
+      productName = Core.Nothing,
+      productQuantity = Core.Nothing,
+      productSku = Core.Nothing
+    }
+
+instance Core.FromJSON ProductData where
+  parseJSON =
+    Core.withObject
+      "ProductData"
+      ( \o ->
+          ProductData
+            Core.<$> (o Core..:? "itemRevenue")
+            Core.<*> (o Core..:? "productName")
+            Core.<*> (o Core..:? "productQuantity" Core.<&> Core.fmap Core.fromAsText)
+            Core.<*> (o Core..:? "productSku")
+      )
+
+instance Core.ToJSON ProductData where
+  toJSON ProductData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("itemRevenue" Core..=) Core.<$> itemRevenue,
+            ("productName" Core..=) Core.<$> productName,
+            ("productQuantity" Core..=)
+              Core.. Core.AsText
+              Core.<$> productQuantity,
+            ("productSku" Core..=) Core.<$> productSku
+          ]
+      )
+
+-- | The data response corresponding to the request.
+--
+-- /See:/ 'newReport' smart constructor.
+data Report = Report
+  { -- | The column headers.
+    columnHeader :: (Core.Maybe ColumnHeader),
+    -- | Response data.
+    data' :: (Core.Maybe ReportData),
+    -- | Page token to retrieve the next page of results in the list.
+    nextPageToken :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'Report' with the minimum fields required to make a request.
+newReport ::
+  Report
+newReport =
+  Report
+    { columnHeader = Core.Nothing,
+      data' = Core.Nothing,
+      nextPageToken = Core.Nothing
+    }
+
+instance Core.FromJSON Report where
+  parseJSON =
+    Core.withObject
+      "Report"
+      ( \o ->
+          Report
+            Core.<$> (o Core..:? "columnHeader")
+            Core.<*> (o Core..:? "data")
+            Core.<*> (o Core..:? "nextPageToken")
+      )
+
+instance Core.ToJSON Report where
+  toJSON Report {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("columnHeader" Core..=) Core.<$> columnHeader,
+            ("data" Core..=) Core.<$> data',
+            ("nextPageToken" Core..=) Core.<$> nextPageToken
+          ]
+      )
+
+-- | The data part of the report.
+--
+-- /See:/ 'newReportData' smart constructor.
+data ReportData = ReportData
+  { -- | The last time the data in the report was refreshed. All the hits received before this timestamp are included in the calculation of the report.
+    dataLastRefreshed :: (Core.Maybe Core.DateTime),
+    -- | If empty reason is specified, the report is empty for this reason.
+    emptyReason :: (Core.Maybe Core.Text),
+    -- | Indicates if response to this request is golden or not. Data is golden when the exact same request will not produce any new results if asked at a later point in time.
+    isDataGolden :: (Core.Maybe Core.Bool),
+    -- | Minimum and maximum values seen over all matching rows. These are both empty when @hideValueRanges@ in the request is false, or when rowCount is zero.
+    maximums :: (Core.Maybe [DateRangeValues]),
+    -- | Minimum and maximum values seen over all matching rows. These are both empty when @hideValueRanges@ in the request is false, or when rowCount is zero.
+    minimums :: (Core.Maybe [DateRangeValues]),
+    -- | Total number of matching rows for this query.
+    rowCount :: (Core.Maybe Core.Int32),
+    -- | There\'s one ReportRow for every unique combination of dimensions.
+    rows :: (Core.Maybe [ReportRow]),
+    -- | If the results are <https://support.google.com/analytics/answer/2637192 sampled>, this returns the total number of samples read, one entry per date range. If the results are not sampled this field will not be defined. See </analytics/devguides/reporting/core/v4/basics#sampling developer guide> for details.
+    samplesReadCounts :: (Core.Maybe [Core.Int64]),
+    -- | If the results are <https://support.google.com/analytics/answer/2637192 sampled>, this returns the total number of samples present, one entry per date range. If the results are not sampled this field will not be defined. See </analytics/devguides/reporting/core/v4/basics#sampling developer guide> for details.
+    samplingSpaceSizes :: (Core.Maybe [Core.Int64]),
+    -- | For each requested date range, for the set of all rows that match the query, every requested value format gets a total. The total for a value format is computed by first totaling the metrics mentioned in the value format and then evaluating the value format as a scalar expression. E.g., The \"totals\" for @3 \/ (ga:sessions + 2)@ we compute @3 \/ ((sum of all relevant ga:sessions) + 2)@. Totals are computed before pagination.
+    totals :: (Core.Maybe [DateRangeValues])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ReportData' with the minimum fields required to make a request.
+newReportData ::
+  ReportData
+newReportData =
+  ReportData
+    { dataLastRefreshed = Core.Nothing,
+      emptyReason = Core.Nothing,
+      isDataGolden = Core.Nothing,
+      maximums = Core.Nothing,
+      minimums = Core.Nothing,
+      rowCount = Core.Nothing,
+      rows = Core.Nothing,
+      samplesReadCounts = Core.Nothing,
+      samplingSpaceSizes = Core.Nothing,
+      totals = Core.Nothing
+    }
+
+instance Core.FromJSON ReportData where
+  parseJSON =
+    Core.withObject
+      "ReportData"
+      ( \o ->
+          ReportData
+            Core.<$> (o Core..:? "dataLastRefreshed")
+            Core.<*> (o Core..:? "emptyReason")
+            Core.<*> (o Core..:? "isDataGolden")
+            Core.<*> (o Core..:? "maximums")
+            Core.<*> (o Core..:? "minimums")
+            Core.<*> (o Core..:? "rowCount")
+            Core.<*> (o Core..:? "rows")
+            Core.<*> ( o
+                         Core..:? "samplesReadCounts"
+                         Core.<&> Core.fmap (Core.fmap Core.fromAsText)
+                     )
+            Core.<*> ( o
+                         Core..:? "samplingSpaceSizes"
+                         Core.<&> Core.fmap (Core.fmap Core.fromAsText)
+                     )
+            Core.<*> (o Core..:? "totals")
+      )
+
+instance Core.ToJSON ReportData where
+  toJSON ReportData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dataLastRefreshed" Core..=) Core.<$> dataLastRefreshed,
+            ("emptyReason" Core..=) Core.<$> emptyReason,
+            ("isDataGolden" Core..=) Core.<$> isDataGolden,
+            ("maximums" Core..=) Core.<$> maximums,
+            ("minimums" Core..=) Core.<$> minimums,
+            ("rowCount" Core..=) Core.<$> rowCount,
+            ("rows" Core..=) Core.<$> rows,
+            ("samplesReadCounts" Core..=)
+              Core.. Core.fmap Core.AsText
+              Core.<$> samplesReadCounts,
+            ("samplingSpaceSizes" Core..=)
+              Core.. Core.fmap Core.AsText
+              Core.<$> samplingSpaceSizes,
+            ("totals" Core..=) Core.<$> totals
+          ]
+      )
+
+-- | The main request class which specifies the Reporting API request.
+--
+-- /See:/ 'newReportRequest' smart constructor.
+data ReportRequest = ReportRequest
+  { -- | Cohort group associated with this request. If there is a cohort group in the request the @ga:cohort@ dimension must be present. Every <#ReportRequest ReportRequest> within a @batchGet@ method must contain the same @cohortGroup@ definition.
+    cohortGroup :: (Core.Maybe CohortGroup),
+    -- | Date ranges in the request. The request can have a maximum of 2 date ranges. The response will contain a set of metric values for each combination of the dimensions for each date range in the request. So, if there are two date ranges, there will be two set of metric values, one for the original date range and one for the second date range. The @reportRequest.dateRanges@ field should not be specified for cohorts or Lifetime value requests. If a date range is not provided, the default date range is (startDate: current date - 7 days, endDate: current date - 1 day). Every <#ReportRequest ReportRequest> within a @batchGet@ method must contain the same @dateRanges@ definition.
+    dateRanges :: (Core.Maybe [DateRange]),
+    -- | The dimension filter clauses for filtering Dimension Values. They are logically combined with the @AND@ operator. Note that filtering occurs before any dimensions are aggregated, so that the returned metrics represent the total for only the relevant dimensions.
+    dimensionFilterClauses :: (Core.Maybe [DimensionFilterClause]),
+    -- | The dimensions requested. Requests can have a total of 9 dimensions.
+    dimensions :: (Core.Maybe [Dimension]),
+    -- | Dimension or metric filters that restrict the data returned for your request. To use the @filtersExpression@, supply a dimension or metric on which to filter, followed by the filter expression. For example, the following expression selects @ga:browser@ dimension which starts with Firefox; @ga:browser=~^Firefox@. For more information on dimensions and metric filters, see <https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters Filters reference>.
+    filtersExpression :: (Core.Maybe Core.Text),
+    -- | If set to true, hides the total of all metrics for all the matching rows, for every date range. The default false and will return the totals.
+    hideTotals :: (Core.Maybe Core.Bool),
+    -- | If set to true, hides the minimum and maximum across all matching rows. The default is false and the value ranges are returned.
+    hideValueRanges :: (Core.Maybe Core.Bool),
+    -- | If set to false, the response does not include rows if all the retrieved metrics are equal to zero. The default is false which will exclude these rows.
+    includeEmptyRows :: (Core.Maybe Core.Bool),
+    -- | The metric filter clauses. They are logically combined with the @AND@ operator. Metric filters look at only the first date range and not the comparing date range. Note that filtering on metrics occurs after the metrics are aggregated.
+    metricFilterClauses :: (Core.Maybe [MetricFilterClause]),
+    -- | The metrics requested. Requests must specify at least one metric. Requests can have a total of 10 metrics.
+    metrics :: (Core.Maybe [Metric]),
+    -- | Sort order on output rows. To compare two rows, the elements of the following are applied in order until a difference is found. All date ranges in the output get the same row order.
+    orderBys :: (Core.Maybe [OrderBy]),
+    -- | Page size is for paging and specifies the maximum number of returned rows. Page size should be >= 0. A query returns the default of 1,000 rows. The Analytics Core Reporting API returns a maximum of 100,000 rows per request, no matter how many you ask for. It can also return fewer rows than requested, if there aren\'t as many dimension segments as you expect. For instance, there are fewer than 300 possible values for @ga:country@, so when segmenting only by country, you can\'t get more than 300 rows, even if you set @pageSize@ to a higher value.
+    pageSize :: (Core.Maybe Core.Int32),
+    -- | A continuation token to get the next page of the results. Adding this to the request will return the rows after the pageToken. The pageToken should be the value returned in the nextPageToken parameter in the response to the GetReports request.
+    pageToken :: (Core.Maybe Core.Text),
+    -- | The pivot definitions. Requests can have a maximum of 2 pivots.
+    pivots :: (Core.Maybe [Pivot]),
+    -- | The desired report <https://support.google.com/analytics/answer/2637192 sample> size. If the the @samplingLevel@ field is unspecified the @DEFAULT@ sampling level is used. Every <#ReportRequest ReportRequest> within a @batchGet@ method must contain the same @samplingLevel@ definition. See </analytics/devguides/reporting/core/v4/basics#sampling developer guide> for details.
+    samplingLevel :: (Core.Maybe ReportRequest_SamplingLevel),
+    -- | Segment the data returned for the request. A segment definition helps look at a subset of the segment request. A request can contain up to four segments. Every <#ReportRequest ReportRequest> within a @batchGet@ method must contain the same @segments@ definition. Requests with segments must have the @ga:segment@ dimension.
+    segments :: (Core.Maybe [Segment]),
+    -- | The Analytics <https://support.google.com/analytics/answer/1009618 view ID> from which to retrieve data. Every <#ReportRequest ReportRequest> within a @batchGet@ method must contain the same @viewId@.
+    viewId :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ReportRequest' with the minimum fields required to make a request.
+newReportRequest ::
+  ReportRequest
+newReportRequest =
+  ReportRequest
+    { cohortGroup = Core.Nothing,
+      dateRanges = Core.Nothing,
+      dimensionFilterClauses = Core.Nothing,
+      dimensions = Core.Nothing,
+      filtersExpression = Core.Nothing,
+      hideTotals = Core.Nothing,
+      hideValueRanges = Core.Nothing,
+      includeEmptyRows = Core.Nothing,
+      metricFilterClauses = Core.Nothing,
+      metrics = Core.Nothing,
+      orderBys = Core.Nothing,
+      pageSize = Core.Nothing,
+      pageToken = Core.Nothing,
+      pivots = Core.Nothing,
+      samplingLevel = Core.Nothing,
+      segments = Core.Nothing,
+      viewId = Core.Nothing
+    }
+
+instance Core.FromJSON ReportRequest where
+  parseJSON =
+    Core.withObject
+      "ReportRequest"
+      ( \o ->
+          ReportRequest
+            Core.<$> (o Core..:? "cohortGroup")
+            Core.<*> (o Core..:? "dateRanges")
+            Core.<*> (o Core..:? "dimensionFilterClauses")
+            Core.<*> (o Core..:? "dimensions")
+            Core.<*> (o Core..:? "filtersExpression")
+            Core.<*> (o Core..:? "hideTotals")
+            Core.<*> (o Core..:? "hideValueRanges")
+            Core.<*> (o Core..:? "includeEmptyRows")
+            Core.<*> (o Core..:? "metricFilterClauses")
+            Core.<*> (o Core..:? "metrics")
+            Core.<*> (o Core..:? "orderBys")
+            Core.<*> (o Core..:? "pageSize")
+            Core.<*> (o Core..:? "pageToken")
+            Core.<*> (o Core..:? "pivots")
+            Core.<*> (o Core..:? "samplingLevel")
+            Core.<*> (o Core..:? "segments")
+            Core.<*> (o Core..:? "viewId")
+      )
+
+instance Core.ToJSON ReportRequest where
+  toJSON ReportRequest {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("cohortGroup" Core..=) Core.<$> cohortGroup,
+            ("dateRanges" Core..=) Core.<$> dateRanges,
+            ("dimensionFilterClauses" Core..=) Core.<$> dimensionFilterClauses,
+            ("dimensions" Core..=) Core.<$> dimensions,
+            ("filtersExpression" Core..=) Core.<$> filtersExpression,
+            ("hideTotals" Core..=) Core.<$> hideTotals,
+            ("hideValueRanges" Core..=) Core.<$> hideValueRanges,
+            ("includeEmptyRows" Core..=) Core.<$> includeEmptyRows,
+            ("metricFilterClauses" Core..=) Core.<$> metricFilterClauses,
+            ("metrics" Core..=) Core.<$> metrics,
+            ("orderBys" Core..=) Core.<$> orderBys,
+            ("pageSize" Core..=) Core.<$> pageSize,
+            ("pageToken" Core..=) Core.<$> pageToken,
+            ("pivots" Core..=) Core.<$> pivots,
+            ("samplingLevel" Core..=) Core.<$> samplingLevel,
+            ("segments" Core..=) Core.<$> segments,
+            ("viewId" Core..=) Core.<$> viewId
+          ]
+      )
+
+-- | A row in the report.
+--
+-- /See:/ 'newReportRow' smart constructor.
+data ReportRow = ReportRow
+  { -- | List of requested dimensions.
+    dimensions :: (Core.Maybe [Core.Text]),
+    -- | List of metrics for each requested DateRange.
+    metrics :: (Core.Maybe [DateRangeValues])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ReportRow' with the minimum fields required to make a request.
+newReportRow ::
+  ReportRow
+newReportRow =
+  ReportRow {dimensions = Core.Nothing, metrics = Core.Nothing}
+
+instance Core.FromJSON ReportRow where
+  parseJSON =
+    Core.withObject
+      "ReportRow"
+      ( \o ->
+          ReportRow
+            Core.<$> (o Core..:? "dimensions")
+            Core.<*> (o Core..:? "metrics")
+      )
+
+instance Core.ToJSON ReportRow where
+  toJSON ReportRow {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dimensions" Core..=) Core.<$> dimensions,
+            ("metrics" Core..=) Core.<$> metrics
+          ]
+      )
+
+-- | The resource quota tokens remaining for the property after the request is completed.
+--
+-- /See:/ 'newResourceQuotasRemaining' smart constructor.
+data ResourceQuotasRemaining = ResourceQuotasRemaining
+  { -- | Daily resource quota remaining remaining.
+    dailyQuotaTokensRemaining :: (Core.Maybe Core.Int32),
+    -- | Hourly resource quota tokens remaining.
+    hourlyQuotaTokensRemaining :: (Core.Maybe Core.Int32)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ResourceQuotasRemaining' with the minimum fields required to make a request.
+newResourceQuotasRemaining ::
+  ResourceQuotasRemaining
+newResourceQuotasRemaining =
+  ResourceQuotasRemaining
+    { dailyQuotaTokensRemaining = Core.Nothing,
+      hourlyQuotaTokensRemaining = Core.Nothing
+    }
+
+instance Core.FromJSON ResourceQuotasRemaining where
+  parseJSON =
+    Core.withObject
+      "ResourceQuotasRemaining"
+      ( \o ->
+          ResourceQuotasRemaining
+            Core.<$> (o Core..:? "dailyQuotaTokensRemaining")
+            Core.<*> (o Core..:? "hourlyQuotaTokensRemaining")
+      )
+
+instance Core.ToJSON ResourceQuotasRemaining where
+  toJSON ResourceQuotasRemaining {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dailyQuotaTokensRemaining" Core..=)
+              Core.<$> dailyQuotaTokensRemaining,
+            ("hourlyQuotaTokensRemaining" Core..=)
+              Core.<$> hourlyQuotaTokensRemaining
+          ]
+      )
+
+--
+-- /See:/ 'newScreenviewData' smart constructor.
+data ScreenviewData = ScreenviewData
+  { -- | The application name.
+    appName :: (Core.Maybe Core.Text),
+    -- | Mobile manufacturer or branded name. Eg: \"Google\", \"Apple\" etc.
+    mobileDeviceBranding :: (Core.Maybe Core.Text),
+    -- | Mobile device model. Eg: \"Pixel\", \"iPhone\" etc.
+    mobileDeviceModel :: (Core.Maybe Core.Text),
+    -- | The name of the screen.
+    screenName :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ScreenviewData' with the minimum fields required to make a request.
+newScreenviewData ::
+  ScreenviewData
+newScreenviewData =
+  ScreenviewData
+    { appName = Core.Nothing,
+      mobileDeviceBranding = Core.Nothing,
+      mobileDeviceModel = Core.Nothing,
+      screenName = Core.Nothing
+    }
+
+instance Core.FromJSON ScreenviewData where
+  parseJSON =
+    Core.withObject
+      "ScreenviewData"
+      ( \o ->
+          ScreenviewData
+            Core.<$> (o Core..:? "appName")
+            Core.<*> (o Core..:? "mobileDeviceBranding")
+            Core.<*> (o Core..:? "mobileDeviceModel")
+            Core.<*> (o Core..:? "screenName")
+      )
+
+instance Core.ToJSON ScreenviewData where
+  toJSON ScreenviewData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("appName" Core..=) Core.<$> appName,
+            ("mobileDeviceBranding" Core..=) Core.<$> mobileDeviceBranding,
+            ("mobileDeviceModel" Core..=) Core.<$> mobileDeviceModel,
+            ("screenName" Core..=) Core.<$> screenName
+          ]
+      )
+
+-- | The request to fetch User Report from Reporting API @userActivity:get@ call.
+--
+-- /See:/ 'newSearchUserActivityRequest' smart constructor.
+data SearchUserActivityRequest = SearchUserActivityRequest
+  { -- | Set of all activity types being requested. Only acvities matching these types will be returned in the response. If empty, all activies will be returned.
+    activityTypes :: (Core.Maybe [SearchUserActivityRequest_ActivityTypesItem]),
+    -- | Date range for which to retrieve the user activity. If a date range is not provided, the default date range is (startDate: current date - 7 days, endDate: current date - 1 day).
+    dateRange :: (Core.Maybe DateRange),
+    -- | Page size is for paging and specifies the maximum number of returned rows. Page size should be > 0. If the value is 0 or if the field isn\'t specified, the request returns the default of 1000 rows per page.
+    pageSize :: (Core.Maybe Core.Int32),
+    -- | A continuation token to get the next page of the results. Adding this to the request will return the rows after the pageToken. The pageToken should be the value returned in the nextPageToken parameter in the response to the <#SearchUserActivityRequest SearchUserActivityRequest> request.
+    pageToken :: (Core.Maybe Core.Text),
+    -- | Required. Unique user Id to query for. Every <#SearchUserActivityRequest SearchUserActivityRequest> must contain this field.
+    user :: (Core.Maybe User),
+    -- | Required. The Analytics <https://support.google.com/analytics/answer/1009618 view ID> from which to retrieve data. Every <#SearchUserActivityRequest SearchUserActivityRequest> must contain the @viewId@.
+    viewId :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SearchUserActivityRequest' with the minimum fields required to make a request.
+newSearchUserActivityRequest ::
+  SearchUserActivityRequest
+newSearchUserActivityRequest =
+  SearchUserActivityRequest
+    { activityTypes = Core.Nothing,
+      dateRange = Core.Nothing,
+      pageSize = Core.Nothing,
+      pageToken = Core.Nothing,
+      user = Core.Nothing,
+      viewId = Core.Nothing
+    }
+
+instance Core.FromJSON SearchUserActivityRequest where
+  parseJSON =
+    Core.withObject
+      "SearchUserActivityRequest"
+      ( \o ->
+          SearchUserActivityRequest
+            Core.<$> (o Core..:? "activityTypes")
+            Core.<*> (o Core..:? "dateRange")
+            Core.<*> (o Core..:? "pageSize")
+            Core.<*> (o Core..:? "pageToken")
+            Core.<*> (o Core..:? "user")
+            Core.<*> (o Core..:? "viewId")
+      )
+
+instance Core.ToJSON SearchUserActivityRequest where
+  toJSON SearchUserActivityRequest {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("activityTypes" Core..=) Core.<$> activityTypes,
+            ("dateRange" Core..=) Core.<$> dateRange,
+            ("pageSize" Core..=) Core.<$> pageSize,
+            ("pageToken" Core..=) Core.<$> pageToken,
+            ("user" Core..=) Core.<$> user,
+            ("viewId" Core..=) Core.<$> viewId
+          ]
+      )
+
+-- | The response from @userActivity:get@ call.
+--
+-- /See:/ 'newSearchUserActivityResponse' smart constructor.
+data SearchUserActivityResponse = SearchUserActivityResponse
+  { -- | This token should be passed to <#SearchUserActivityRequest SearchUserActivityRequest> to retrieve the next page.
+    nextPageToken :: (Core.Maybe Core.Text),
+    -- | This field represents the <https://support.google.com/analytics/answer/2637192 sampling rate> for the given request and is a number between 0.0 to 1.0. See </analytics/devguides/reporting/core/v4/basics#sampling developer guide> for details.
+    sampleRate :: (Core.Maybe Core.Double),
+    -- | Each record represents a session (device details, duration, etc).
+    sessions :: (Core.Maybe [UserActivitySession]),
+    -- | Total rows returned by this query (across different pages).
+    totalRows :: (Core.Maybe Core.Int32)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SearchUserActivityResponse' with the minimum fields required to make a request.
+newSearchUserActivityResponse ::
+  SearchUserActivityResponse
+newSearchUserActivityResponse =
+  SearchUserActivityResponse
+    { nextPageToken = Core.Nothing,
+      sampleRate = Core.Nothing,
+      sessions = Core.Nothing,
+      totalRows = Core.Nothing
+    }
+
+instance Core.FromJSON SearchUserActivityResponse where
+  parseJSON =
+    Core.withObject
+      "SearchUserActivityResponse"
+      ( \o ->
+          SearchUserActivityResponse
+            Core.<$> (o Core..:? "nextPageToken")
+            Core.<*> (o Core..:? "sampleRate")
+            Core.<*> (o Core..:? "sessions")
+            Core.<*> (o Core..:? "totalRows")
+      )
+
+instance Core.ToJSON SearchUserActivityResponse where
+  toJSON SearchUserActivityResponse {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
+            ("sampleRate" Core..=) Core.<$> sampleRate,
+            ("sessions" Core..=) Core.<$> sessions,
+            ("totalRows" Core..=) Core.<$> totalRows
+          ]
+      )
+
+-- | The segment definition, if the report needs to be segmented. A Segment is a subset of the Analytics data. For example, of the entire set of users, one Segment might be users from a particular country or city.
+--
+-- /See:/ 'newSegment' smart constructor.
+data Segment = Segment
+  { -- | A dynamic segment definition in the request.
+    dynamicSegment :: (Core.Maybe DynamicSegment),
+    -- | The segment ID of a built-in or custom segment, for example @gaid::-3@.
+    segmentId :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'Segment' with the minimum fields required to make a request.
+newSegment ::
+  Segment
+newSegment =
+  Segment {dynamicSegment = Core.Nothing, segmentId = Core.Nothing}
+
+instance Core.FromJSON Segment where
+  parseJSON =
+    Core.withObject
+      "Segment"
+      ( \o ->
+          Segment
+            Core.<$> (o Core..:? "dynamicSegment")
+            Core.<*> (o Core..:? "segmentId")
+      )
+
+instance Core.ToJSON Segment where
+  toJSON Segment {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dynamicSegment" Core..=) Core.<$> dynamicSegment,
+            ("segmentId" Core..=) Core.<$> segmentId
+          ]
+      )
+
+-- | SegmentDefinition defines the segment to be a set of SegmentFilters which are combined together with a logical @AND@ operation.
+--
+-- /See:/ 'newSegmentDefinition' smart constructor.
+newtype SegmentDefinition = SegmentDefinition
+  { -- | A segment is defined by a set of segment filters which are combined together with a logical @AND@ operation.
+    segmentFilters :: (Core.Maybe [SegmentFilter])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SegmentDefinition' with the minimum fields required to make a request.
+newSegmentDefinition ::
+  SegmentDefinition
+newSegmentDefinition =
+  SegmentDefinition {segmentFilters = Core.Nothing}
+
+instance Core.FromJSON SegmentDefinition where
+  parseJSON =
+    Core.withObject
+      "SegmentDefinition"
+      (\o -> SegmentDefinition Core.<$> (o Core..:? "segmentFilters"))
+
+instance Core.ToJSON SegmentDefinition where
+  toJSON SegmentDefinition {..} =
+    Core.object
+      ( Core.catMaybes
+          [("segmentFilters" Core..=) Core.<$> segmentFilters]
+      )
+
+-- | Dimension filter specifies the filtering options on a dimension.
+--
+-- /See:/ 'newSegmentDimensionFilter' smart constructor.
+data SegmentDimensionFilter = SegmentDimensionFilter
+  { -- | Should the match be case sensitive, ignored for @IN_LIST@ operator.
+    caseSensitive :: (Core.Maybe Core.Bool),
+    -- | Name of the dimension for which the filter is being applied.
+    dimensionName :: (Core.Maybe Core.Text),
+    -- | The list of expressions, only the first element is used for all operators
+    expressions :: (Core.Maybe [Core.Text]),
+    -- | Maximum comparison values for @BETWEEN@ match type.
+    maxComparisonValue :: (Core.Maybe Core.Text),
+    -- | Minimum comparison values for @BETWEEN@ match type.
+    minComparisonValue :: (Core.Maybe Core.Text),
+    -- | The operator to use to match the dimension with the expressions.
+    operator :: (Core.Maybe SegmentDimensionFilter_Operator)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SegmentDimensionFilter' with the minimum fields required to make a request.
+newSegmentDimensionFilter ::
+  SegmentDimensionFilter
+newSegmentDimensionFilter =
+  SegmentDimensionFilter
+    { caseSensitive = Core.Nothing,
+      dimensionName = Core.Nothing,
+      expressions = Core.Nothing,
+      maxComparisonValue = Core.Nothing,
+      minComparisonValue = Core.Nothing,
+      operator = Core.Nothing
+    }
+
+instance Core.FromJSON SegmentDimensionFilter where
+  parseJSON =
+    Core.withObject
+      "SegmentDimensionFilter"
+      ( \o ->
+          SegmentDimensionFilter
+            Core.<$> (o Core..:? "caseSensitive")
+            Core.<*> (o Core..:? "dimensionName")
+            Core.<*> (o Core..:? "expressions")
+            Core.<*> (o Core..:? "maxComparisonValue")
+            Core.<*> (o Core..:? "minComparisonValue")
+            Core.<*> (o Core..:? "operator")
+      )
+
+instance Core.ToJSON SegmentDimensionFilter where
+  toJSON SegmentDimensionFilter {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("caseSensitive" Core..=) Core.<$> caseSensitive,
+            ("dimensionName" Core..=) Core.<$> dimensionName,
+            ("expressions" Core..=) Core.<$> expressions,
+            ("maxComparisonValue" Core..=) Core.<$> maxComparisonValue,
+            ("minComparisonValue" Core..=) Core.<$> minComparisonValue,
+            ("operator" Core..=) Core.<$> operator
+          ]
+      )
+
+-- | SegmentFilter defines the segment to be either a simple or a sequence segment. A simple segment condition contains dimension and metric conditions to select the sessions or users. A sequence segment condition can be used to select users or sessions based on sequential conditions.
+--
+-- /See:/ 'newSegmentFilter' smart constructor.
+data SegmentFilter = SegmentFilter
+  { -- | If true, match the complement of simple or sequence segment. For example, to match all visits not from \"New York\", we can define the segment as follows: \"sessionSegment\": { \"segmentFilters\": [{ \"simpleSegment\" :{ \"orFiltersForSegment\": [{ \"segmentFilterClauses\":[{ \"dimensionFilter\": { \"dimensionName\": \"ga:city\", \"expressions\": [\"New York\"] } }] }] }, \"not\": \"True\" }] },
+    not :: (Core.Maybe Core.Bool),
+    -- | Sequence conditions consist of one or more steps, where each step is defined by one or more dimension\/metric conditions. Multiple steps can be combined with special sequence operators.
+    sequenceSegment :: (Core.Maybe SequenceSegment),
+    -- | A Simple segment conditions consist of one or more dimension\/metric conditions that can be combined
+    simpleSegment :: (Core.Maybe SimpleSegment)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SegmentFilter' with the minimum fields required to make a request.
+newSegmentFilter ::
+  SegmentFilter
+newSegmentFilter =
+  SegmentFilter
+    { not = Core.Nothing,
+      sequenceSegment = Core.Nothing,
+      simpleSegment = Core.Nothing
+    }
+
+instance Core.FromJSON SegmentFilter where
+  parseJSON =
+    Core.withObject
+      "SegmentFilter"
+      ( \o ->
+          SegmentFilter
+            Core.<$> (o Core..:? "not")
+            Core.<*> (o Core..:? "sequenceSegment")
+            Core.<*> (o Core..:? "simpleSegment")
+      )
+
+instance Core.ToJSON SegmentFilter where
+  toJSON SegmentFilter {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("not" Core..=) Core.<$> not,
+            ("sequenceSegment" Core..=) Core.<$> sequenceSegment,
+            ("simpleSegment" Core..=) Core.<$> simpleSegment
+          ]
+      )
+
+-- | Filter Clause to be used in a segment definition, can be wither a metric or a dimension filter.
+--
+-- /See:/ 'newSegmentFilterClause' smart constructor.
+data SegmentFilterClause = SegmentFilterClause
+  { -- | Dimension Filter for the segment definition.
+    dimensionFilter :: (Core.Maybe SegmentDimensionFilter),
+    -- | Metric Filter for the segment definition.
+    metricFilter :: (Core.Maybe SegmentMetricFilter),
+    -- | Matches the complement (@!@) of the filter.
+    not :: (Core.Maybe Core.Bool)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SegmentFilterClause' with the minimum fields required to make a request.
+newSegmentFilterClause ::
+  SegmentFilterClause
+newSegmentFilterClause =
+  SegmentFilterClause
+    { dimensionFilter = Core.Nothing,
+      metricFilter = Core.Nothing,
+      not = Core.Nothing
+    }
+
+instance Core.FromJSON SegmentFilterClause where
+  parseJSON =
+    Core.withObject
+      "SegmentFilterClause"
+      ( \o ->
+          SegmentFilterClause
+            Core.<$> (o Core..:? "dimensionFilter")
+            Core.<*> (o Core..:? "metricFilter")
+            Core.<*> (o Core..:? "not")
+      )
+
+instance Core.ToJSON SegmentFilterClause where
+  toJSON SegmentFilterClause {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("dimensionFilter" Core..=) Core.<$> dimensionFilter,
+            ("metricFilter" Core..=) Core.<$> metricFilter,
+            ("not" Core..=) Core.<$> not
+          ]
+      )
+
+-- | Metric filter to be used in a segment filter clause.
+--
+-- /See:/ 'newSegmentMetricFilter' smart constructor.
+data SegmentMetricFilter = SegmentMetricFilter
+  { -- | The value to compare against. If the operator is @BETWEEN@, this value is treated as minimum comparison value.
+    comparisonValue :: (Core.Maybe Core.Text),
+    -- | Max comparison value is only used for @BETWEEN@ operator.
+    maxComparisonValue :: (Core.Maybe Core.Text),
+    -- | The metric that will be filtered on. A @metricFilter@ must contain a metric name.
+    metricName :: (Core.Maybe Core.Text),
+    -- | Specifies is the operation to perform to compare the metric. The default is @EQUAL@.
+    operator :: (Core.Maybe SegmentMetricFilter_Operator),
+    -- | Scope for a metric defines the level at which that metric is defined. The specified metric scope must be equal to or greater than its primary scope as defined in the data model. The primary scope is defined by if the segment is selecting users or sessions.
+    scope :: (Core.Maybe SegmentMetricFilter_Scope)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SegmentMetricFilter' with the minimum fields required to make a request.
+newSegmentMetricFilter ::
+  SegmentMetricFilter
+newSegmentMetricFilter =
+  SegmentMetricFilter
+    { comparisonValue = Core.Nothing,
+      maxComparisonValue = Core.Nothing,
+      metricName = Core.Nothing,
+      operator = Core.Nothing,
+      scope = Core.Nothing
+    }
+
+instance Core.FromJSON SegmentMetricFilter where
+  parseJSON =
+    Core.withObject
+      "SegmentMetricFilter"
+      ( \o ->
+          SegmentMetricFilter
+            Core.<$> (o Core..:? "comparisonValue")
+            Core.<*> (o Core..:? "maxComparisonValue")
+            Core.<*> (o Core..:? "metricName")
+            Core.<*> (o Core..:? "operator")
+            Core.<*> (o Core..:? "scope")
+      )
+
+instance Core.ToJSON SegmentMetricFilter where
+  toJSON SegmentMetricFilter {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("comparisonValue" Core..=) Core.<$> comparisonValue,
+            ("maxComparisonValue" Core..=) Core.<$> maxComparisonValue,
+            ("metricName" Core..=) Core.<$> metricName,
+            ("operator" Core..=) Core.<$> operator,
+            ("scope" Core..=) Core.<$> scope
+          ]
+      )
+
+-- | A segment sequence definition.
+--
+-- /See:/ 'newSegmentSequenceStep' smart constructor.
+data SegmentSequenceStep = SegmentSequenceStep
+  { -- | Specifies if the step immediately precedes or can be any time before the next step.
+    matchType :: (Core.Maybe SegmentSequenceStep_MatchType),
+    -- | A sequence is specified with a list of Or grouped filters which are combined with @AND@ operator.
+    orFiltersForSegment :: (Core.Maybe [OrFiltersForSegment])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SegmentSequenceStep' with the minimum fields required to make a request.
+newSegmentSequenceStep ::
+  SegmentSequenceStep
+newSegmentSequenceStep =
+  SegmentSequenceStep
+    { matchType = Core.Nothing,
+      orFiltersForSegment = Core.Nothing
+    }
+
+instance Core.FromJSON SegmentSequenceStep where
+  parseJSON =
+    Core.withObject
+      "SegmentSequenceStep"
+      ( \o ->
+          SegmentSequenceStep
+            Core.<$> (o Core..:? "matchType")
+            Core.<*> (o Core..:? "orFiltersForSegment")
+      )
+
+instance Core.ToJSON SegmentSequenceStep where
+  toJSON SegmentSequenceStep {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("matchType" Core..=) Core.<$> matchType,
+            ("orFiltersForSegment" Core..=) Core.<$> orFiltersForSegment
+          ]
+      )
+
+-- | Sequence conditions consist of one or more steps, where each step is defined by one or more dimension\/metric conditions. Multiple steps can be combined with special sequence operators.
+--
+-- /See:/ 'newSequenceSegment' smart constructor.
+data SequenceSegment = SequenceSegment
+  { -- | If set, first step condition must match the first hit of the visitor (in the date range).
+    firstStepShouldMatchFirstHit :: (Core.Maybe Core.Bool),
+    -- | The list of steps in the sequence.
+    segmentSequenceSteps :: (Core.Maybe [SegmentSequenceStep])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SequenceSegment' with the minimum fields required to make a request.
+newSequenceSegment ::
+  SequenceSegment
+newSequenceSegment =
+  SequenceSegment
+    { firstStepShouldMatchFirstHit = Core.Nothing,
+      segmentSequenceSteps = Core.Nothing
+    }
+
+instance Core.FromJSON SequenceSegment where
+  parseJSON =
+    Core.withObject
+      "SequenceSegment"
+      ( \o ->
+          SequenceSegment
+            Core.<$> (o Core..:? "firstStepShouldMatchFirstHit")
+            Core.<*> (o Core..:? "segmentSequenceSteps")
+      )
+
+instance Core.ToJSON SequenceSegment where
+  toJSON SequenceSegment {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("firstStepShouldMatchFirstHit" Core..=)
+              Core.<$> firstStepShouldMatchFirstHit,
+            ("segmentSequenceSteps" Core..=) Core.<$> segmentSequenceSteps
+          ]
+      )
+
+-- | A Simple segment conditions consist of one or more dimension\/metric conditions that can be combined.
+--
+-- /See:/ 'newSimpleSegment' smart constructor.
+newtype SimpleSegment = SimpleSegment
+  { -- | A list of segment filters groups which are combined with logical @AND@ operator.
+    orFiltersForSegment :: (Core.Maybe [OrFiltersForSegment])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SimpleSegment' with the minimum fields required to make a request.
+newSimpleSegment ::
+  SimpleSegment
+newSimpleSegment =
+  SimpleSegment {orFiltersForSegment = Core.Nothing}
+
+instance Core.FromJSON SimpleSegment where
+  parseJSON =
+    Core.withObject
+      "SimpleSegment"
+      (\o -> SimpleSegment Core.<$> (o Core..:? "orFiltersForSegment"))
+
+instance Core.ToJSON SimpleSegment where
+  toJSON SimpleSegment {..} =
+    Core.object
+      ( Core.catMaybes
+          [("orFiltersForSegment" Core..=) Core.<$> orFiltersForSegment]
+      )
+
+-- | Represents details collected when the visitor performs a transaction on the page.
+--
+-- /See:/ 'newTransactionData' smart constructor.
+data TransactionData = TransactionData
+  { -- | The transaction ID, supplied by the e-commerce tracking method, for the purchase in the shopping cart.
+    transactionId :: (Core.Maybe Core.Text),
+    -- | The total sale revenue (excluding shipping and tax) of the transaction.
+    transactionRevenue :: (Core.Maybe Core.Double),
+    -- | Total cost of shipping.
+    transactionShipping :: (Core.Maybe Core.Double),
+    -- | Total tax for the transaction.
+    transactionTax :: (Core.Maybe Core.Double)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'TransactionData' with the minimum fields required to make a request.
+newTransactionData ::
+  TransactionData
+newTransactionData =
+  TransactionData
+    { transactionId = Core.Nothing,
+      transactionRevenue = Core.Nothing,
+      transactionShipping = Core.Nothing,
+      transactionTax = Core.Nothing
+    }
+
+instance Core.FromJSON TransactionData where
+  parseJSON =
+    Core.withObject
+      "TransactionData"
+      ( \o ->
+          TransactionData
+            Core.<$> (o Core..:? "transactionId")
+            Core.<*> (o Core..:? "transactionRevenue")
+            Core.<*> (o Core..:? "transactionShipping")
+            Core.<*> (o Core..:? "transactionTax")
+      )
+
+instance Core.ToJSON TransactionData where
+  toJSON TransactionData {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("transactionId" Core..=) Core.<$> transactionId,
+            ("transactionRevenue" Core..=) Core.<$> transactionRevenue,
+            ("transactionShipping" Core..=) Core.<$> transactionShipping,
+            ("transactionTax" Core..=) Core.<$> transactionTax
+          ]
+      )
+
+-- | Contains information to identify a particular user uniquely.
+--
+-- /See:/ 'newUser' smart constructor.
+data User = User
+  { -- | Type of the user in the request. The field @userId@ is associated with this type.
+    type' :: (Core.Maybe User_Type),
+    -- | Unique Id of the user for which the data is being requested.
+    userId :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'User' with the minimum fields required to make a request.
+newUser ::
+  User
+newUser = User {type' = Core.Nothing, userId = Core.Nothing}
+
+instance Core.FromJSON User where
+  parseJSON =
+    Core.withObject
+      "User"
+      ( \o ->
+          User Core.<$> (o Core..:? "type") Core.<*> (o Core..:? "userId")
+      )
+
+instance Core.ToJSON User where
+  toJSON User {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("type" Core..=) Core.<$> type',
+            ("userId" Core..=) Core.<$> userId
+          ]
+      )
+
+-- | This represents a user session performed on a specific device at a certain time over a period of time.
+--
+-- /See:/ 'newUserActivitySession' smart constructor.
+data UserActivitySession = UserActivitySession
+  { -- | Represents a detailed view into each of the activity in this session.
+    activities :: (Core.Maybe [Activity]),
+    -- | The data source of a hit. By default, hits sent from analytics.js are reported as \"web\" and hits sent from the mobile SDKs are reported as \"app\". These values can be overridden in the Measurement Protocol.
+    dataSource :: (Core.Maybe Core.Text),
+    -- | The type of device used: \"mobile\", \"tablet\" etc.
+    deviceCategory :: (Core.Maybe Core.Text),
+    -- | Platform on which the activity happened: \"android\", \"ios\" etc.
+    platform :: (Core.Maybe Core.Text),
+    -- | Date of this session in ISO-8601 format.
+    sessionDate :: (Core.Maybe Core.Text),
+    -- | Unique ID of the session.
+    sessionId :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'UserActivitySession' with the minimum fields required to make a request.
+newUserActivitySession ::
+  UserActivitySession
+newUserActivitySession =
+  UserActivitySession
+    { activities = Core.Nothing,
+      dataSource = Core.Nothing,
+      deviceCategory = Core.Nothing,
+      platform = Core.Nothing,
+      sessionDate = Core.Nothing,
+      sessionId = Core.Nothing
+    }
+
+instance Core.FromJSON UserActivitySession where
+  parseJSON =
+    Core.withObject
+      "UserActivitySession"
+      ( \o ->
+          UserActivitySession
+            Core.<$> (o Core..:? "activities")
+            Core.<*> (o Core..:? "dataSource")
+            Core.<*> (o Core..:? "deviceCategory")
+            Core.<*> (o Core..:? "platform")
+            Core.<*> (o Core..:? "sessionDate")
+            Core.<*> (o Core..:? "sessionId")
+      )
+
+instance Core.ToJSON UserActivitySession where
+  toJSON UserActivitySession {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("activities" Core..=) Core.<$> activities,
+            ("dataSource" Core..=) Core.<$> dataSource,
+            ("deviceCategory" Core..=) Core.<$> deviceCategory,
+            ("platform" Core..=) Core.<$> platform,
+            ("sessionDate" Core..=) Core.<$> sessionDate,
+            ("sessionId" Core..=) Core.<$> sessionId
+          ]
+      )
diff --git a/gen/Gogol/AnalyticsReporting/Internal/Sum.hs b/gen/Gogol/AnalyticsReporting/Internal/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AnalyticsReporting/Internal/Sum.hs
@@ -0,0 +1,1068 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AnalyticsReporting.Internal.Sum
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Gogol.AnalyticsReporting.Internal.Sum
+  ( -- * Xgafv
+    Xgafv
+      ( Xgafv_1,
+        Xgafv_2,
+        ..
+      ),
+
+    -- * Activity_ActivityType
+    Activity_ActivityType
+      ( Activity_ActivityType_ACTIVITYTYPEUNSPECIFIED,
+        Activity_ActivityType_Pageview,
+        Activity_ActivityType_Screenview,
+        Activity_ActivityType_Goal,
+        Activity_ActivityType_Ecommerce,
+        Activity_ActivityType_Event,
+        ..
+      ),
+
+    -- * Cohort_Type
+    Cohort_Type
+      ( Cohort_Type_UNSPECIFIEDCOHORTTYPE,
+        Cohort_Type_FIRSTVISITDATE,
+        ..
+      ),
+
+    -- * DimensionFilter_Operator
+    DimensionFilter_Operator
+      ( DimensionFilter_Operator_OPERATORUNSPECIFIED,
+        DimensionFilter_Operator_Regexp,
+        DimensionFilter_Operator_BEGINSWITH,
+        DimensionFilter_Operator_ENDSWITH,
+        DimensionFilter_Operator_Partial,
+        DimensionFilter_Operator_Exact,
+        DimensionFilter_Operator_NUMERICEQUAL,
+        DimensionFilter_Operator_NUMERICGREATERTHAN,
+        DimensionFilter_Operator_NUMERICLESSTHAN,
+        DimensionFilter_Operator_INLIST,
+        ..
+      ),
+
+    -- * DimensionFilterClause_Operator
+    DimensionFilterClause_Operator
+      ( DimensionFilterClause_Operator_OPERATORUNSPECIFIED,
+        DimensionFilterClause_Operator_OR,
+        DimensionFilterClause_Operator_And,
+        ..
+      ),
+
+    -- * EcommerceData_ActionType
+    EcommerceData_ActionType
+      ( EcommerceData_ActionType_Unknown,
+        EcommerceData_ActionType_Click,
+        EcommerceData_ActionType_DETAILSVIEW,
+        EcommerceData_ActionType_ADDTOCART,
+        EcommerceData_ActionType_REMOVEFROMCART,
+        EcommerceData_ActionType_Checkout,
+        EcommerceData_ActionType_Payment,
+        EcommerceData_ActionType_Refund,
+        EcommerceData_ActionType_CHECKOUTOPTION,
+        ..
+      ),
+
+    -- * EcommerceData_EcommerceType
+    EcommerceData_EcommerceType
+      ( EcommerceData_EcommerceType_ECOMMERCETYPEUNSPECIFIED,
+        EcommerceData_EcommerceType_Classic,
+        EcommerceData_EcommerceType_Enhanced,
+        ..
+      ),
+
+    -- * Metric_FormattingType
+    Metric_FormattingType
+      ( Metric_FormattingType_METRICTYPEUNSPECIFIED,
+        Metric_FormattingType_Integer,
+        Metric_FormattingType_Float,
+        Metric_FormattingType_Currency,
+        Metric_FormattingType_Percent,
+        Metric_FormattingType_Time,
+        ..
+      ),
+
+    -- * MetricFilter_Operator
+    MetricFilter_Operator
+      ( MetricFilter_Operator_OPERATORUNSPECIFIED,
+        MetricFilter_Operator_Equal,
+        MetricFilter_Operator_LESSTHAN,
+        MetricFilter_Operator_GREATERTHAN,
+        MetricFilter_Operator_ISMISSING,
+        ..
+      ),
+
+    -- * MetricFilterClause_Operator
+    MetricFilterClause_Operator
+      ( MetricFilterClause_Operator_OPERATORUNSPECIFIED,
+        MetricFilterClause_Operator_OR,
+        MetricFilterClause_Operator_And,
+        ..
+      ),
+
+    -- * MetricHeaderEntry_Type
+    MetricHeaderEntry_Type
+      ( MetricHeaderEntry_Type_METRICTYPEUNSPECIFIED,
+        MetricHeaderEntry_Type_Integer,
+        MetricHeaderEntry_Type_Float,
+        MetricHeaderEntry_Type_Currency,
+        MetricHeaderEntry_Type_Percent,
+        MetricHeaderEntry_Type_Time,
+        ..
+      ),
+
+    -- * OrderBy_OrderType
+    OrderBy_OrderType
+      ( OrderBy_OrderType_ORDERTYPEUNSPECIFIED,
+        OrderBy_OrderType_Value,
+        OrderBy_OrderType_Delta,
+        OrderBy_OrderType_Smart,
+        OrderBy_OrderType_HISTOGRAMBUCKET,
+        OrderBy_OrderType_DIMENSIONASINTEGER,
+        ..
+      ),
+
+    -- * OrderBy_SortOrder
+    OrderBy_SortOrder
+      ( OrderBy_SortOrder_SORTORDERUNSPECIFIED,
+        OrderBy_SortOrder_Ascending,
+        OrderBy_SortOrder_Descending,
+        ..
+      ),
+
+    -- * ReportRequest_SamplingLevel
+    ReportRequest_SamplingLevel
+      ( ReportRequest_SamplingLevel_SAMPLINGUNSPECIFIED,
+        ReportRequest_SamplingLevel_Default,
+        ReportRequest_SamplingLevel_Small,
+        ReportRequest_SamplingLevel_Large,
+        ..
+      ),
+
+    -- * SearchUserActivityRequest_ActivityTypesItem
+    SearchUserActivityRequest_ActivityTypesItem
+      ( SearchUserActivityRequest_ActivityTypesItem_ACTIVITYTYPEUNSPECIFIED,
+        SearchUserActivityRequest_ActivityTypesItem_Pageview,
+        SearchUserActivityRequest_ActivityTypesItem_Screenview,
+        SearchUserActivityRequest_ActivityTypesItem_Goal,
+        SearchUserActivityRequest_ActivityTypesItem_Ecommerce,
+        SearchUserActivityRequest_ActivityTypesItem_Event,
+        ..
+      ),
+
+    -- * SegmentDimensionFilter_Operator
+    SegmentDimensionFilter_Operator
+      ( SegmentDimensionFilter_Operator_OPERATORUNSPECIFIED,
+        SegmentDimensionFilter_Operator_Regexp,
+        SegmentDimensionFilter_Operator_BEGINSWITH,
+        SegmentDimensionFilter_Operator_ENDSWITH,
+        SegmentDimensionFilter_Operator_Partial,
+        SegmentDimensionFilter_Operator_Exact,
+        SegmentDimensionFilter_Operator_INLIST,
+        SegmentDimensionFilter_Operator_NUMERICLESSTHAN,
+        SegmentDimensionFilter_Operator_NUMERICGREATERTHAN,
+        SegmentDimensionFilter_Operator_NUMERICBETWEEN,
+        ..
+      ),
+
+    -- * SegmentMetricFilter_Operator
+    SegmentMetricFilter_Operator
+      ( SegmentMetricFilter_Operator_UNSPECIFIEDOPERATOR,
+        SegmentMetricFilter_Operator_LESSTHAN,
+        SegmentMetricFilter_Operator_GREATERTHAN,
+        SegmentMetricFilter_Operator_Equal,
+        SegmentMetricFilter_Operator_Between,
+        ..
+      ),
+
+    -- * SegmentMetricFilter_Scope
+    SegmentMetricFilter_Scope
+      ( SegmentMetricFilter_Scope_UNSPECIFIEDSCOPE,
+        SegmentMetricFilter_Scope_Product,
+        SegmentMetricFilter_Scope_Hit,
+        SegmentMetricFilter_Scope_Session,
+        SegmentMetricFilter_Scope_User,
+        ..
+      ),
+
+    -- * SegmentSequenceStep_MatchType
+    SegmentSequenceStep_MatchType
+      ( SegmentSequenceStep_MatchType_UNSPECIFIEDMATCHTYPE,
+        SegmentSequenceStep_MatchType_Precedes,
+        SegmentSequenceStep_MatchType_IMMEDIATELYPRECEDES,
+        ..
+      ),
+
+    -- * User_Type
+    User_Type
+      ( User_Type_USERIDTYPEUNSPECIFIED,
+        User_Type_USERIDTYPEUSERID,
+        User_Type_USERIDTYPECLIENTID,
+        ..
+      ),
+  )
+where
+
+import Gogol.Prelude qualified as Core
+
+-- | V1 error format.
+newtype Xgafv = Xgafv {fromXgafv :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | v1 error format
+pattern Xgafv_1 :: Xgafv
+pattern Xgafv_1 = Xgafv "1"
+
+-- | v2 error format
+pattern Xgafv_2 :: Xgafv
+pattern Xgafv_2 = Xgafv "2"
+
+{-# COMPLETE
+  Xgafv_1,
+  Xgafv_2,
+  Xgafv
+  #-}
+
+-- | Type of this activity.
+newtype Activity_ActivityType = Activity_ActivityType {fromActivity_ActivityType :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | ActivityType will never have this value in the response. Using this type in the request will result in an error.
+pattern Activity_ActivityType_ACTIVITYTYPEUNSPECIFIED :: Activity_ActivityType
+pattern Activity_ActivityType_ACTIVITYTYPEUNSPECIFIED = Activity_ActivityType "ACTIVITY_TYPE_UNSPECIFIED"
+
+-- | Used when the activity resulted out of a visitor viewing a page.
+pattern Activity_ActivityType_Pageview :: Activity_ActivityType
+pattern Activity_ActivityType_Pageview = Activity_ActivityType "PAGEVIEW"
+
+-- | Used when the activity resulted out of a visitor using an application on a mobile device.
+pattern Activity_ActivityType_Screenview :: Activity_ActivityType
+pattern Activity_ActivityType_Screenview = Activity_ActivityType "SCREENVIEW"
+
+-- | Used to denote that a goal type activity.
+pattern Activity_ActivityType_Goal :: Activity_ActivityType
+pattern Activity_ActivityType_Goal = Activity_ActivityType "GOAL"
+
+-- | An e-commerce transaction was performed by the visitor on the page.
+pattern Activity_ActivityType_Ecommerce :: Activity_ActivityType
+pattern Activity_ActivityType_Ecommerce = Activity_ActivityType "ECOMMERCE"
+
+-- | Used when the activity is an event.
+pattern Activity_ActivityType_Event :: Activity_ActivityType
+pattern Activity_ActivityType_Event = Activity_ActivityType "EVENT"
+
+{-# COMPLETE
+  Activity_ActivityType_ACTIVITYTYPEUNSPECIFIED,
+  Activity_ActivityType_Pageview,
+  Activity_ActivityType_Screenview,
+  Activity_ActivityType_Goal,
+  Activity_ActivityType_Ecommerce,
+  Activity_ActivityType_Event,
+  Activity_ActivityType
+  #-}
+
+-- | Type of the cohort. The only supported type as of now is @FIRST_VISIT_DATE@. If this field is unspecified the cohort is treated as @FIRST_VISIT_DATE@ type cohort.
+newtype Cohort_Type = Cohort_Type {fromCohort_Type :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | If unspecified it\'s treated as @FIRST_VISIT_DATE@.
+pattern Cohort_Type_UNSPECIFIEDCOHORTTYPE :: Cohort_Type
+pattern Cohort_Type_UNSPECIFIEDCOHORTTYPE = Cohort_Type "UNSPECIFIED_COHORT_TYPE"
+
+-- | Cohorts that are selected based on first visit date.
+pattern Cohort_Type_FIRSTVISITDATE :: Cohort_Type
+pattern Cohort_Type_FIRSTVISITDATE = Cohort_Type "FIRST_VISIT_DATE"
+
+{-# COMPLETE
+  Cohort_Type_UNSPECIFIEDCOHORTTYPE,
+  Cohort_Type_FIRSTVISITDATE,
+  Cohort_Type
+  #-}
+
+-- | How to match the dimension to the expression. The default is REGEXP.
+newtype DimensionFilter_Operator = DimensionFilter_Operator {fromDimensionFilter_Operator :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | If the match type is unspecified, it is treated as a @REGEXP@.
+pattern DimensionFilter_Operator_OPERATORUNSPECIFIED :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_OPERATORUNSPECIFIED = DimensionFilter_Operator "OPERATOR_UNSPECIFIED"
+
+-- | The match expression is treated as a regular expression. All match types are not treated as regular expressions.
+pattern DimensionFilter_Operator_Regexp :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_Regexp = DimensionFilter_Operator "REGEXP"
+
+-- | Matches the value which begin with the match expression provided.
+pattern DimensionFilter_Operator_BEGINSWITH :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_BEGINSWITH = DimensionFilter_Operator "BEGINS_WITH"
+
+-- | Matches the values which end with the match expression provided.
+pattern DimensionFilter_Operator_ENDSWITH :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_ENDSWITH = DimensionFilter_Operator "ENDS_WITH"
+
+-- | Substring match.
+pattern DimensionFilter_Operator_Partial :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_Partial = DimensionFilter_Operator "PARTIAL"
+
+-- | The value should match the match expression entirely.
+pattern DimensionFilter_Operator_Exact :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_Exact = DimensionFilter_Operator "EXACT"
+
+-- | Integer comparison filters. case sensitivity is ignored for these and the expression is assumed to be a string representing an integer. Failure conditions: - If expression is not a valid int64, the client should expect an error. - Input dimensions that are not valid int64 values will never match the filter.
+pattern DimensionFilter_Operator_NUMERICEQUAL :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_NUMERICEQUAL = DimensionFilter_Operator "NUMERIC_EQUAL"
+
+-- | Checks if the dimension is numerically greater than the match expression. Read the description for @NUMERIC_EQUALS@ for restrictions.
+pattern DimensionFilter_Operator_NUMERICGREATERTHAN :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_NUMERICGREATERTHAN = DimensionFilter_Operator "NUMERIC_GREATER_THAN"
+
+-- | Checks if the dimension is numerically less than the match expression. Read the description for @NUMERIC_EQUALS@ for restrictions.
+pattern DimensionFilter_Operator_NUMERICLESSTHAN :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_NUMERICLESSTHAN = DimensionFilter_Operator "NUMERIC_LESS_THAN"
+
+-- | This option is used to specify a dimension filter whose expression can take any value from a selected list of values. This helps avoiding evaluating multiple exact match dimension filters which are OR\'ed for every single response row. For example: expressions: [\"A\", \"B\", \"C\"] Any response row whose dimension has it is value as A, B or C, matches this DimensionFilter.
+pattern DimensionFilter_Operator_INLIST :: DimensionFilter_Operator
+pattern DimensionFilter_Operator_INLIST = DimensionFilter_Operator "IN_LIST"
+
+{-# COMPLETE
+  DimensionFilter_Operator_OPERATORUNSPECIFIED,
+  DimensionFilter_Operator_Regexp,
+  DimensionFilter_Operator_BEGINSWITH,
+  DimensionFilter_Operator_ENDSWITH,
+  DimensionFilter_Operator_Partial,
+  DimensionFilter_Operator_Exact,
+  DimensionFilter_Operator_NUMERICEQUAL,
+  DimensionFilter_Operator_NUMERICGREATERTHAN,
+  DimensionFilter_Operator_NUMERICLESSTHAN,
+  DimensionFilter_Operator_INLIST,
+  DimensionFilter_Operator
+  #-}
+
+-- | The operator for combining multiple dimension filters. If unspecified, it is treated as an @OR@.
+newtype DimensionFilterClause_Operator = DimensionFilterClause_Operator {fromDimensionFilterClause_Operator :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Unspecified operator. It is treated as an @OR@.
+pattern DimensionFilterClause_Operator_OPERATORUNSPECIFIED :: DimensionFilterClause_Operator
+pattern DimensionFilterClause_Operator_OPERATORUNSPECIFIED = DimensionFilterClause_Operator "OPERATOR_UNSPECIFIED"
+
+-- | The logical @OR@ operator.
+pattern DimensionFilterClause_Operator_OR :: DimensionFilterClause_Operator
+pattern DimensionFilterClause_Operator_OR = DimensionFilterClause_Operator "OR"
+
+-- | The logical @AND@ operator.
+pattern DimensionFilterClause_Operator_And :: DimensionFilterClause_Operator
+pattern DimensionFilterClause_Operator_And = DimensionFilterClause_Operator "AND"
+
+{-# COMPLETE
+  DimensionFilterClause_Operator_OPERATORUNSPECIFIED,
+  DimensionFilterClause_Operator_OR,
+  DimensionFilterClause_Operator_And,
+  DimensionFilterClause_Operator
+  #-}
+
+-- | Action associated with this e-commerce action.
+newtype EcommerceData_ActionType = EcommerceData_ActionType {fromEcommerceData_ActionType :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Action type is not known.
+pattern EcommerceData_ActionType_Unknown :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_Unknown = EcommerceData_ActionType "UNKNOWN"
+
+-- | Click through of product lists.
+pattern EcommerceData_ActionType_Click :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_Click = EcommerceData_ActionType "CLICK"
+
+-- | Product detail views.
+pattern EcommerceData_ActionType_DETAILSVIEW :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_DETAILSVIEW = EcommerceData_ActionType "DETAILS_VIEW"
+
+-- | Add product(s) to cart.
+pattern EcommerceData_ActionType_ADDTOCART :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_ADDTOCART = EcommerceData_ActionType "ADD_TO_CART"
+
+-- | Remove product(s) from cart.
+pattern EcommerceData_ActionType_REMOVEFROMCART :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_REMOVEFROMCART = EcommerceData_ActionType "REMOVE_FROM_CART"
+
+-- | Check out.
+pattern EcommerceData_ActionType_Checkout :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_Checkout = EcommerceData_ActionType "CHECKOUT"
+
+-- | Completed purchase.
+pattern EcommerceData_ActionType_Payment :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_Payment = EcommerceData_ActionType "PAYMENT"
+
+-- | Refund of purchase.
+pattern EcommerceData_ActionType_Refund :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_Refund = EcommerceData_ActionType "REFUND"
+
+-- | Checkout options.
+pattern EcommerceData_ActionType_CHECKOUTOPTION :: EcommerceData_ActionType
+pattern EcommerceData_ActionType_CHECKOUTOPTION = EcommerceData_ActionType "CHECKOUT_OPTION"
+
+{-# COMPLETE
+  EcommerceData_ActionType_Unknown,
+  EcommerceData_ActionType_Click,
+  EcommerceData_ActionType_DETAILSVIEW,
+  EcommerceData_ActionType_ADDTOCART,
+  EcommerceData_ActionType_REMOVEFROMCART,
+  EcommerceData_ActionType_Checkout,
+  EcommerceData_ActionType_Payment,
+  EcommerceData_ActionType_Refund,
+  EcommerceData_ActionType_CHECKOUTOPTION,
+  EcommerceData_ActionType
+  #-}
+
+-- | The type of this e-commerce activity.
+newtype EcommerceData_EcommerceType = EcommerceData_EcommerceType {fromEcommerceData_EcommerceType :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Used when the e-commerce activity type is unspecified.
+pattern EcommerceData_EcommerceType_ECOMMERCETYPEUNSPECIFIED :: EcommerceData_EcommerceType
+pattern EcommerceData_EcommerceType_ECOMMERCETYPEUNSPECIFIED = EcommerceData_EcommerceType "ECOMMERCE_TYPE_UNSPECIFIED"
+
+-- | Used when activity has classic (non-enhanced) e-commerce information.
+pattern EcommerceData_EcommerceType_Classic :: EcommerceData_EcommerceType
+pattern EcommerceData_EcommerceType_Classic = EcommerceData_EcommerceType "CLASSIC"
+
+-- | Used when activity has enhanced e-commerce information.
+pattern EcommerceData_EcommerceType_Enhanced :: EcommerceData_EcommerceType
+pattern EcommerceData_EcommerceType_Enhanced = EcommerceData_EcommerceType "ENHANCED"
+
+{-# COMPLETE
+  EcommerceData_EcommerceType_ECOMMERCETYPEUNSPECIFIED,
+  EcommerceData_EcommerceType_Classic,
+  EcommerceData_EcommerceType_Enhanced,
+  EcommerceData_EcommerceType
+  #-}
+
+-- | Specifies how the metric expression should be formatted, for example @INTEGER@.
+newtype Metric_FormattingType = Metric_FormattingType {fromMetric_FormattingType :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Metric type is unspecified.
+pattern Metric_FormattingType_METRICTYPEUNSPECIFIED :: Metric_FormattingType
+pattern Metric_FormattingType_METRICTYPEUNSPECIFIED = Metric_FormattingType "METRIC_TYPE_UNSPECIFIED"
+
+-- | Integer metric.
+pattern Metric_FormattingType_Integer :: Metric_FormattingType
+pattern Metric_FormattingType_Integer = Metric_FormattingType "INTEGER"
+
+-- | Float metric.
+pattern Metric_FormattingType_Float :: Metric_FormattingType
+pattern Metric_FormattingType_Float = Metric_FormattingType "FLOAT"
+
+-- | Currency metric.
+pattern Metric_FormattingType_Currency :: Metric_FormattingType
+pattern Metric_FormattingType_Currency = Metric_FormattingType "CURRENCY"
+
+-- | Percentage metric.
+pattern Metric_FormattingType_Percent :: Metric_FormattingType
+pattern Metric_FormattingType_Percent = Metric_FormattingType "PERCENT"
+
+-- | Time metric in @HH:MM:SS@ format.
+pattern Metric_FormattingType_Time :: Metric_FormattingType
+pattern Metric_FormattingType_Time = Metric_FormattingType "TIME"
+
+{-# COMPLETE
+  Metric_FormattingType_METRICTYPEUNSPECIFIED,
+  Metric_FormattingType_Integer,
+  Metric_FormattingType_Float,
+  Metric_FormattingType_Currency,
+  Metric_FormattingType_Percent,
+  Metric_FormattingType_Time,
+  Metric_FormattingType
+  #-}
+
+-- | Is the metric @EQUAL@, @LESS_THAN@ or @GREATER_THAN@ the comparisonValue, the default is @EQUAL@. If the operator is @IS_MISSING@, checks if the metric is missing and would ignore the comparisonValue.
+newtype MetricFilter_Operator = MetricFilter_Operator {fromMetricFilter_Operator :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | If the operator is not specified, it is treated as @EQUAL@.
+pattern MetricFilter_Operator_OPERATORUNSPECIFIED :: MetricFilter_Operator
+pattern MetricFilter_Operator_OPERATORUNSPECIFIED = MetricFilter_Operator "OPERATOR_UNSPECIFIED"
+
+-- | Should the value of the metric be exactly equal to the comparison value.
+pattern MetricFilter_Operator_Equal :: MetricFilter_Operator
+pattern MetricFilter_Operator_Equal = MetricFilter_Operator "EQUAL"
+
+-- | Should the value of the metric be less than to the comparison value.
+pattern MetricFilter_Operator_LESSTHAN :: MetricFilter_Operator
+pattern MetricFilter_Operator_LESSTHAN = MetricFilter_Operator "LESS_THAN"
+
+-- | Should the value of the metric be greater than to the comparison value.
+pattern MetricFilter_Operator_GREATERTHAN :: MetricFilter_Operator
+pattern MetricFilter_Operator_GREATERTHAN = MetricFilter_Operator "GREATER_THAN"
+
+-- | Validates if the metric is missing. Doesn\'t take comparisonValue into account.
+pattern MetricFilter_Operator_ISMISSING :: MetricFilter_Operator
+pattern MetricFilter_Operator_ISMISSING = MetricFilter_Operator "IS_MISSING"
+
+{-# COMPLETE
+  MetricFilter_Operator_OPERATORUNSPECIFIED,
+  MetricFilter_Operator_Equal,
+  MetricFilter_Operator_LESSTHAN,
+  MetricFilter_Operator_GREATERTHAN,
+  MetricFilter_Operator_ISMISSING,
+  MetricFilter_Operator
+  #-}
+
+-- | The operator for combining multiple metric filters. If unspecified, it is treated as an @OR@.
+newtype MetricFilterClause_Operator = MetricFilterClause_Operator {fromMetricFilterClause_Operator :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Unspecified operator. It is treated as an @OR@.
+pattern MetricFilterClause_Operator_OPERATORUNSPECIFIED :: MetricFilterClause_Operator
+pattern MetricFilterClause_Operator_OPERATORUNSPECIFIED = MetricFilterClause_Operator "OPERATOR_UNSPECIFIED"
+
+-- | The logical @OR@ operator.
+pattern MetricFilterClause_Operator_OR :: MetricFilterClause_Operator
+pattern MetricFilterClause_Operator_OR = MetricFilterClause_Operator "OR"
+
+-- | The logical @AND@ operator.
+pattern MetricFilterClause_Operator_And :: MetricFilterClause_Operator
+pattern MetricFilterClause_Operator_And = MetricFilterClause_Operator "AND"
+
+{-# COMPLETE
+  MetricFilterClause_Operator_OPERATORUNSPECIFIED,
+  MetricFilterClause_Operator_OR,
+  MetricFilterClause_Operator_And,
+  MetricFilterClause_Operator
+  #-}
+
+-- | The type of the metric, for example @INTEGER@.
+newtype MetricHeaderEntry_Type = MetricHeaderEntry_Type {fromMetricHeaderEntry_Type :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Metric type is unspecified.
+pattern MetricHeaderEntry_Type_METRICTYPEUNSPECIFIED :: MetricHeaderEntry_Type
+pattern MetricHeaderEntry_Type_METRICTYPEUNSPECIFIED = MetricHeaderEntry_Type "METRIC_TYPE_UNSPECIFIED"
+
+-- | Integer metric.
+pattern MetricHeaderEntry_Type_Integer :: MetricHeaderEntry_Type
+pattern MetricHeaderEntry_Type_Integer = MetricHeaderEntry_Type "INTEGER"
+
+-- | Float metric.
+pattern MetricHeaderEntry_Type_Float :: MetricHeaderEntry_Type
+pattern MetricHeaderEntry_Type_Float = MetricHeaderEntry_Type "FLOAT"
+
+-- | Currency metric.
+pattern MetricHeaderEntry_Type_Currency :: MetricHeaderEntry_Type
+pattern MetricHeaderEntry_Type_Currency = MetricHeaderEntry_Type "CURRENCY"
+
+-- | Percentage metric.
+pattern MetricHeaderEntry_Type_Percent :: MetricHeaderEntry_Type
+pattern MetricHeaderEntry_Type_Percent = MetricHeaderEntry_Type "PERCENT"
+
+-- | Time metric in @HH:MM:SS@ format.
+pattern MetricHeaderEntry_Type_Time :: MetricHeaderEntry_Type
+pattern MetricHeaderEntry_Type_Time = MetricHeaderEntry_Type "TIME"
+
+{-# COMPLETE
+  MetricHeaderEntry_Type_METRICTYPEUNSPECIFIED,
+  MetricHeaderEntry_Type_Integer,
+  MetricHeaderEntry_Type_Float,
+  MetricHeaderEntry_Type_Currency,
+  MetricHeaderEntry_Type_Percent,
+  MetricHeaderEntry_Type_Time,
+  MetricHeaderEntry_Type
+  #-}
+
+-- | The order type. The default orderType is @VALUE@.
+newtype OrderBy_OrderType = OrderBy_OrderType {fromOrderBy_OrderType :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Unspecified order type will be treated as sort based on value.
+pattern OrderBy_OrderType_ORDERTYPEUNSPECIFIED :: OrderBy_OrderType
+pattern OrderBy_OrderType_ORDERTYPEUNSPECIFIED = OrderBy_OrderType "ORDER_TYPE_UNSPECIFIED"
+
+-- | The sort order is based on the value of the chosen column; looks only at the first date range.
+pattern OrderBy_OrderType_Value :: OrderBy_OrderType
+pattern OrderBy_OrderType_Value = OrderBy_OrderType "VALUE"
+
+-- | The sort order is based on the difference of the values of the chosen column between the first two date ranges. Usable only if there are exactly two date ranges.
+pattern OrderBy_OrderType_Delta :: OrderBy_OrderType
+pattern OrderBy_OrderType_Delta = OrderBy_OrderType "DELTA"
+
+-- | The sort order is based on weighted value of the chosen column. If column has n\/d format, then weighted value of this ratio will be @(n + totals.n)\/(d + totals.d)@ Usable only for metrics that represent ratios.
+pattern OrderBy_OrderType_Smart :: OrderBy_OrderType
+pattern OrderBy_OrderType_Smart = OrderBy_OrderType "SMART"
+
+-- | Histogram order type is applicable only to dimension columns with non-empty histogram-buckets.
+pattern OrderBy_OrderType_HISTOGRAMBUCKET :: OrderBy_OrderType
+pattern OrderBy_OrderType_HISTOGRAMBUCKET = OrderBy_OrderType "HISTOGRAM_BUCKET"
+
+-- | If the dimensions are fixed length numbers, ordinary sort would just work fine. @DIMENSION_AS_INTEGER@ can be used if the dimensions are variable length numbers.
+pattern OrderBy_OrderType_DIMENSIONASINTEGER :: OrderBy_OrderType
+pattern OrderBy_OrderType_DIMENSIONASINTEGER = OrderBy_OrderType "DIMENSION_AS_INTEGER"
+
+{-# COMPLETE
+  OrderBy_OrderType_ORDERTYPEUNSPECIFIED,
+  OrderBy_OrderType_Value,
+  OrderBy_OrderType_Delta,
+  OrderBy_OrderType_Smart,
+  OrderBy_OrderType_HISTOGRAMBUCKET,
+  OrderBy_OrderType_DIMENSIONASINTEGER,
+  OrderBy_OrderType
+  #-}
+
+-- | The sorting order for the field.
+newtype OrderBy_SortOrder = OrderBy_SortOrder {fromOrderBy_SortOrder :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | If the sort order is unspecified, the default is ascending.
+pattern OrderBy_SortOrder_SORTORDERUNSPECIFIED :: OrderBy_SortOrder
+pattern OrderBy_SortOrder_SORTORDERUNSPECIFIED = OrderBy_SortOrder "SORT_ORDER_UNSPECIFIED"
+
+-- | Ascending sort. The field will be sorted in an ascending manner.
+pattern OrderBy_SortOrder_Ascending :: OrderBy_SortOrder
+pattern OrderBy_SortOrder_Ascending = OrderBy_SortOrder "ASCENDING"
+
+-- | Descending sort. The field will be sorted in a descending manner.
+pattern OrderBy_SortOrder_Descending :: OrderBy_SortOrder
+pattern OrderBy_SortOrder_Descending = OrderBy_SortOrder "DESCENDING"
+
+{-# COMPLETE
+  OrderBy_SortOrder_SORTORDERUNSPECIFIED,
+  OrderBy_SortOrder_Ascending,
+  OrderBy_SortOrder_Descending,
+  OrderBy_SortOrder
+  #-}
+
+-- | The desired report <https://support.google.com/analytics/answer/2637192 sample> size. If the the @samplingLevel@ field is unspecified the @DEFAULT@ sampling level is used. Every <#ReportRequest ReportRequest> within a @batchGet@ method must contain the same @samplingLevel@ definition. See </analytics/devguides/reporting/core/v4/basics#sampling developer guide> for details.
+newtype ReportRequest_SamplingLevel = ReportRequest_SamplingLevel {fromReportRequest_SamplingLevel :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | If the @samplingLevel@ field is unspecified the @DEFAULT@ sampling level is used.
+pattern ReportRequest_SamplingLevel_SAMPLINGUNSPECIFIED :: ReportRequest_SamplingLevel
+pattern ReportRequest_SamplingLevel_SAMPLINGUNSPECIFIED = ReportRequest_SamplingLevel "SAMPLING_UNSPECIFIED"
+
+-- | Returns response with a sample size that balances speed and accuracy.
+pattern ReportRequest_SamplingLevel_Default :: ReportRequest_SamplingLevel
+pattern ReportRequest_SamplingLevel_Default = ReportRequest_SamplingLevel "DEFAULT"
+
+-- | It returns a fast response with a smaller sampling size.
+pattern ReportRequest_SamplingLevel_Small :: ReportRequest_SamplingLevel
+pattern ReportRequest_SamplingLevel_Small = ReportRequest_SamplingLevel "SMALL"
+
+-- | Returns a more accurate response using a large sampling size. But this may result in response being slower.
+pattern ReportRequest_SamplingLevel_Large :: ReportRequest_SamplingLevel
+pattern ReportRequest_SamplingLevel_Large = ReportRequest_SamplingLevel "LARGE"
+
+{-# COMPLETE
+  ReportRequest_SamplingLevel_SAMPLINGUNSPECIFIED,
+  ReportRequest_SamplingLevel_Default,
+  ReportRequest_SamplingLevel_Small,
+  ReportRequest_SamplingLevel_Large,
+  ReportRequest_SamplingLevel
+  #-}
+
+newtype SearchUserActivityRequest_ActivityTypesItem = SearchUserActivityRequest_ActivityTypesItem {fromSearchUserActivityRequest_ActivityTypesItem :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | ActivityType will never have this value in the response. Using this type in the request will result in an error.
+pattern SearchUserActivityRequest_ActivityTypesItem_ACTIVITYTYPEUNSPECIFIED :: SearchUserActivityRequest_ActivityTypesItem
+pattern SearchUserActivityRequest_ActivityTypesItem_ACTIVITYTYPEUNSPECIFIED = SearchUserActivityRequest_ActivityTypesItem "ACTIVITY_TYPE_UNSPECIFIED"
+
+-- | Used when the activity resulted out of a visitor viewing a page.
+pattern SearchUserActivityRequest_ActivityTypesItem_Pageview :: SearchUserActivityRequest_ActivityTypesItem
+pattern SearchUserActivityRequest_ActivityTypesItem_Pageview = SearchUserActivityRequest_ActivityTypesItem "PAGEVIEW"
+
+-- | Used when the activity resulted out of a visitor using an application on a mobile device.
+pattern SearchUserActivityRequest_ActivityTypesItem_Screenview :: SearchUserActivityRequest_ActivityTypesItem
+pattern SearchUserActivityRequest_ActivityTypesItem_Screenview = SearchUserActivityRequest_ActivityTypesItem "SCREENVIEW"
+
+-- | Used to denote that a goal type activity.
+pattern SearchUserActivityRequest_ActivityTypesItem_Goal :: SearchUserActivityRequest_ActivityTypesItem
+pattern SearchUserActivityRequest_ActivityTypesItem_Goal = SearchUserActivityRequest_ActivityTypesItem "GOAL"
+
+-- | An e-commerce transaction was performed by the visitor on the page.
+pattern SearchUserActivityRequest_ActivityTypesItem_Ecommerce :: SearchUserActivityRequest_ActivityTypesItem
+pattern SearchUserActivityRequest_ActivityTypesItem_Ecommerce = SearchUserActivityRequest_ActivityTypesItem "ECOMMERCE"
+
+-- | Used when the activity is an event.
+pattern SearchUserActivityRequest_ActivityTypesItem_Event :: SearchUserActivityRequest_ActivityTypesItem
+pattern SearchUserActivityRequest_ActivityTypesItem_Event = SearchUserActivityRequest_ActivityTypesItem "EVENT"
+
+{-# COMPLETE
+  SearchUserActivityRequest_ActivityTypesItem_ACTIVITYTYPEUNSPECIFIED,
+  SearchUserActivityRequest_ActivityTypesItem_Pageview,
+  SearchUserActivityRequest_ActivityTypesItem_Screenview,
+  SearchUserActivityRequest_ActivityTypesItem_Goal,
+  SearchUserActivityRequest_ActivityTypesItem_Ecommerce,
+  SearchUserActivityRequest_ActivityTypesItem_Event,
+  SearchUserActivityRequest_ActivityTypesItem
+  #-}
+
+-- | The operator to use to match the dimension with the expressions.
+newtype SegmentDimensionFilter_Operator = SegmentDimensionFilter_Operator {fromSegmentDimensionFilter_Operator :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | If the match type is unspecified, it is treated as a REGEXP.
+pattern SegmentDimensionFilter_Operator_OPERATORUNSPECIFIED :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_OPERATORUNSPECIFIED = SegmentDimensionFilter_Operator "OPERATOR_UNSPECIFIED"
+
+-- | The match expression is treated as a regular expression. All other match types are not treated as regular expressions.
+pattern SegmentDimensionFilter_Operator_Regexp :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_Regexp = SegmentDimensionFilter_Operator "REGEXP"
+
+-- | Matches the values which begin with the match expression provided.
+pattern SegmentDimensionFilter_Operator_BEGINSWITH :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_BEGINSWITH = SegmentDimensionFilter_Operator "BEGINS_WITH"
+
+-- | Matches the values which end with the match expression provided.
+pattern SegmentDimensionFilter_Operator_ENDSWITH :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_ENDSWITH = SegmentDimensionFilter_Operator "ENDS_WITH"
+
+-- | Substring match.
+pattern SegmentDimensionFilter_Operator_Partial :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_Partial = SegmentDimensionFilter_Operator "PARTIAL"
+
+-- | The value should match the match expression entirely.
+pattern SegmentDimensionFilter_Operator_Exact :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_Exact = SegmentDimensionFilter_Operator "EXACT"
+
+-- | This option is used to specify a dimension filter whose expression can take any value from a selected list of values. This helps avoiding evaluating multiple exact match dimension filters which are OR\'ed for every single response row. For example: expressions: [\"A\", \"B\", \"C\"] Any response row whose dimension has it is value as A, B or C, matches this DimensionFilter.
+pattern SegmentDimensionFilter_Operator_INLIST :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_INLIST = SegmentDimensionFilter_Operator "IN_LIST"
+
+-- | Integer comparison filters. case sensitivity is ignored for these and the expression is assumed to be a string representing an integer. Failure conditions: - if expression is not a valid int64, the client should expect an error. - input dimensions that are not valid int64 values will never match the filter. Checks if the dimension is numerically less than the match expression.
+pattern SegmentDimensionFilter_Operator_NUMERICLESSTHAN :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_NUMERICLESSTHAN = SegmentDimensionFilter_Operator "NUMERIC_LESS_THAN"
+
+-- | Checks if the dimension is numerically greater than the match expression.
+pattern SegmentDimensionFilter_Operator_NUMERICGREATERTHAN :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_NUMERICGREATERTHAN = SegmentDimensionFilter_Operator "NUMERIC_GREATER_THAN"
+
+-- | Checks if the dimension is numerically between the minimum and maximum of the match expression, boundaries excluded.
+pattern SegmentDimensionFilter_Operator_NUMERICBETWEEN :: SegmentDimensionFilter_Operator
+pattern SegmentDimensionFilter_Operator_NUMERICBETWEEN = SegmentDimensionFilter_Operator "NUMERIC_BETWEEN"
+
+{-# COMPLETE
+  SegmentDimensionFilter_Operator_OPERATORUNSPECIFIED,
+  SegmentDimensionFilter_Operator_Regexp,
+  SegmentDimensionFilter_Operator_BEGINSWITH,
+  SegmentDimensionFilter_Operator_ENDSWITH,
+  SegmentDimensionFilter_Operator_Partial,
+  SegmentDimensionFilter_Operator_Exact,
+  SegmentDimensionFilter_Operator_INLIST,
+  SegmentDimensionFilter_Operator_NUMERICLESSTHAN,
+  SegmentDimensionFilter_Operator_NUMERICGREATERTHAN,
+  SegmentDimensionFilter_Operator_NUMERICBETWEEN,
+  SegmentDimensionFilter_Operator
+  #-}
+
+-- | Specifies is the operation to perform to compare the metric. The default is @EQUAL@.
+newtype SegmentMetricFilter_Operator = SegmentMetricFilter_Operator {fromSegmentMetricFilter_Operator :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Unspecified operator is treated as @LESS_THAN@ operator.
+pattern SegmentMetricFilter_Operator_UNSPECIFIEDOPERATOR :: SegmentMetricFilter_Operator
+pattern SegmentMetricFilter_Operator_UNSPECIFIEDOPERATOR = SegmentMetricFilter_Operator "UNSPECIFIED_OPERATOR"
+
+-- | Checks if the metric value is less than comparison value.
+pattern SegmentMetricFilter_Operator_LESSTHAN :: SegmentMetricFilter_Operator
+pattern SegmentMetricFilter_Operator_LESSTHAN = SegmentMetricFilter_Operator "LESS_THAN"
+
+-- | Checks if the metric value is greater than comparison value.
+pattern SegmentMetricFilter_Operator_GREATERTHAN :: SegmentMetricFilter_Operator
+pattern SegmentMetricFilter_Operator_GREATERTHAN = SegmentMetricFilter_Operator "GREATER_THAN"
+
+-- | Equals operator.
+pattern SegmentMetricFilter_Operator_Equal :: SegmentMetricFilter_Operator
+pattern SegmentMetricFilter_Operator_Equal = SegmentMetricFilter_Operator "EQUAL"
+
+-- | For between operator, both the minimum and maximum are exclusive. We will use @LT@ and @GT@ for comparison.
+pattern SegmentMetricFilter_Operator_Between :: SegmentMetricFilter_Operator
+pattern SegmentMetricFilter_Operator_Between = SegmentMetricFilter_Operator "BETWEEN"
+
+{-# COMPLETE
+  SegmentMetricFilter_Operator_UNSPECIFIEDOPERATOR,
+  SegmentMetricFilter_Operator_LESSTHAN,
+  SegmentMetricFilter_Operator_GREATERTHAN,
+  SegmentMetricFilter_Operator_Equal,
+  SegmentMetricFilter_Operator_Between,
+  SegmentMetricFilter_Operator
+  #-}
+
+-- | Scope for a metric defines the level at which that metric is defined. The specified metric scope must be equal to or greater than its primary scope as defined in the data model. The primary scope is defined by if the segment is selecting users or sessions.
+newtype SegmentMetricFilter_Scope = SegmentMetricFilter_Scope {fromSegmentMetricFilter_Scope :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | If the scope is unspecified, it defaults to the condition scope, @USER@ or @SESSION@ depending on if the segment is trying to choose users or sessions.
+pattern SegmentMetricFilter_Scope_UNSPECIFIEDSCOPE :: SegmentMetricFilter_Scope
+pattern SegmentMetricFilter_Scope_UNSPECIFIEDSCOPE = SegmentMetricFilter_Scope "UNSPECIFIED_SCOPE"
+
+-- | Product scope.
+pattern SegmentMetricFilter_Scope_Product :: SegmentMetricFilter_Scope
+pattern SegmentMetricFilter_Scope_Product = SegmentMetricFilter_Scope "PRODUCT"
+
+-- | Hit scope.
+pattern SegmentMetricFilter_Scope_Hit :: SegmentMetricFilter_Scope
+pattern SegmentMetricFilter_Scope_Hit = SegmentMetricFilter_Scope "HIT"
+
+-- | Session scope.
+pattern SegmentMetricFilter_Scope_Session :: SegmentMetricFilter_Scope
+pattern SegmentMetricFilter_Scope_Session = SegmentMetricFilter_Scope "SESSION"
+
+-- | User scope.
+pattern SegmentMetricFilter_Scope_User :: SegmentMetricFilter_Scope
+pattern SegmentMetricFilter_Scope_User = SegmentMetricFilter_Scope "USER"
+
+{-# COMPLETE
+  SegmentMetricFilter_Scope_UNSPECIFIEDSCOPE,
+  SegmentMetricFilter_Scope_Product,
+  SegmentMetricFilter_Scope_Hit,
+  SegmentMetricFilter_Scope_Session,
+  SegmentMetricFilter_Scope_User,
+  SegmentMetricFilter_Scope
+  #-}
+
+-- | Specifies if the step immediately precedes or can be any time before the next step.
+newtype SegmentSequenceStep_MatchType = SegmentSequenceStep_MatchType {fromSegmentSequenceStep_MatchType :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Unspecified match type is treated as precedes.
+pattern SegmentSequenceStep_MatchType_UNSPECIFIEDMATCHTYPE :: SegmentSequenceStep_MatchType
+pattern SegmentSequenceStep_MatchType_UNSPECIFIEDMATCHTYPE = SegmentSequenceStep_MatchType "UNSPECIFIED_MATCH_TYPE"
+
+-- | Operator indicates that the previous step precedes the next step.
+pattern SegmentSequenceStep_MatchType_Precedes :: SegmentSequenceStep_MatchType
+pattern SegmentSequenceStep_MatchType_Precedes = SegmentSequenceStep_MatchType "PRECEDES"
+
+-- | Operator indicates that the previous step immediately precedes the next step.
+pattern SegmentSequenceStep_MatchType_IMMEDIATELYPRECEDES :: SegmentSequenceStep_MatchType
+pattern SegmentSequenceStep_MatchType_IMMEDIATELYPRECEDES = SegmentSequenceStep_MatchType "IMMEDIATELY_PRECEDES"
+
+{-# COMPLETE
+  SegmentSequenceStep_MatchType_UNSPECIFIEDMATCHTYPE,
+  SegmentSequenceStep_MatchType_Precedes,
+  SegmentSequenceStep_MatchType_IMMEDIATELYPRECEDES,
+  SegmentSequenceStep_MatchType
+  #-}
+
+-- | Type of the user in the request. The field @userId@ is associated with this type.
+newtype User_Type = User_Type {fromUser_Type :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | When the User Id Type is not specified, the default type used will be CLIENT_ID.
+pattern User_Type_USERIDTYPEUNSPECIFIED :: User_Type
+pattern User_Type_USERIDTYPEUNSPECIFIED = User_Type "USER_ID_TYPE_UNSPECIFIED"
+
+-- | A single user, like a signed-in user account, that may interact with content across one or more devices and \/ or browser instances.
+pattern User_Type_USERIDTYPEUSERID :: User_Type
+pattern User_Type_USERIDTYPEUSERID = User_Type "USER_ID_TYPE_USER_ID"
+
+-- | Analytics assigned client_id.
+pattern User_Type_USERIDTYPECLIENTID :: User_Type
+pattern User_Type_USERIDTYPECLIENTID = User_Type "USER_ID_TYPE_CLIENT_ID"
+
+{-# COMPLETE
+  User_Type_USERIDTYPEUNSPECIFIED,
+  User_Type_USERIDTYPEUSERID,
+  User_Type_USERIDTYPECLIENTID,
+  User_Type
+  #-}
diff --git a/gen/Gogol/AnalyticsReporting/Reports/BatchGet.hs b/gen/Gogol/AnalyticsReporting/Reports/BatchGet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AnalyticsReporting/Reports/BatchGet.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AnalyticsReporting.Reports.BatchGet
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the Analytics data.
+--
+-- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference> for @analyticsreporting.reports.batchGet@.
+module Gogol.AnalyticsReporting.Reports.BatchGet
+  ( -- * Resource
+    AnalyticsReportingReportsBatchGetResource,
+
+    -- ** Constructing a Request
+    AnalyticsReportingReportsBatchGet (..),
+    newAnalyticsReportingReportsBatchGet,
+  )
+where
+
+import Gogol.AnalyticsReporting.Types
+import Gogol.Prelude qualified as Core
+
+-- | A resource alias for @analyticsreporting.reports.batchGet@ method which the
+-- 'AnalyticsReportingReportsBatchGet' request conforms to.
+type AnalyticsReportingReportsBatchGetResource =
+  "v4"
+    Core.:> "reports:batchGet"
+    Core.:> Core.QueryParam "$.xgafv" Xgafv
+    Core.:> Core.QueryParam "access_token" Core.Text
+    Core.:> Core.QueryParam "callback" Core.Text
+    Core.:> Core.QueryParam "uploadType" Core.Text
+    Core.:> Core.QueryParam "upload_protocol" Core.Text
+    Core.:> Core.QueryParam "alt" Core.AltJSON
+    Core.:> Core.ReqBody '[Core.JSON] GetReportsRequest
+    Core.:> Core.Post '[Core.JSON] GetReportsResponse
+
+-- | Returns the Analytics data.
+--
+-- /See:/ 'newAnalyticsReportingReportsBatchGet' smart constructor.
+data AnalyticsReportingReportsBatchGet = AnalyticsReportingReportsBatchGet
+  { -- | V1 error format.
+    xgafv :: (Core.Maybe Xgafv),
+    -- | OAuth access token.
+    accessToken :: (Core.Maybe Core.Text),
+    -- | JSONP
+    callback :: (Core.Maybe Core.Text),
+    -- | Multipart request metadata.
+    payload :: GetReportsRequest,
+    -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+    uploadType :: (Core.Maybe Core.Text),
+    -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+    uploadProtocol :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'AnalyticsReportingReportsBatchGet' with the minimum fields required to make a request.
+newAnalyticsReportingReportsBatchGet ::
+  -- |  Multipart request metadata. See 'payload'.
+  GetReportsRequest ->
+  AnalyticsReportingReportsBatchGet
+newAnalyticsReportingReportsBatchGet payload =
+  AnalyticsReportingReportsBatchGet
+    { xgafv = Core.Nothing,
+      accessToken = Core.Nothing,
+      callback = Core.Nothing,
+      payload = payload,
+      uploadType = Core.Nothing,
+      uploadProtocol = Core.Nothing
+    }
+
+instance Core.GoogleRequest AnalyticsReportingReportsBatchGet where
+  type Rs AnalyticsReportingReportsBatchGet = GetReportsResponse
+  type
+    Scopes AnalyticsReportingReportsBatchGet =
+      '[Analytics'FullControl, Analytics'Readonly]
+  requestClient AnalyticsReportingReportsBatchGet {..} =
+    go
+      xgafv
+      accessToken
+      callback
+      uploadType
+      uploadProtocol
+      (Core.Just Core.AltJSON)
+      payload
+      analyticsReportingService
+    where
+      go =
+        Core.buildClient
+          ( Core.Proxy ::
+              Core.Proxy AnalyticsReportingReportsBatchGetResource
+          )
+          Core.mempty
diff --git a/gen/Gogol/AnalyticsReporting/Types.hs b/gen/Gogol/AnalyticsReporting/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AnalyticsReporting/Types.hs
@@ -0,0 +1,315 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AnalyticsReporting.Types
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Gogol.AnalyticsReporting.Types
+  ( -- * Configuration
+    analyticsReportingService,
+
+    -- * OAuth Scopes
+    Analytics'FullControl,
+    Analytics'Readonly,
+
+    -- * Types
+
+    -- ** Xgafv
+    Xgafv (..),
+
+    -- ** Activity
+    Activity (..),
+    newActivity,
+
+    -- ** Activity_ActivityType
+    Activity_ActivityType (..),
+
+    -- ** Cohort
+    Cohort (..),
+    newCohort,
+
+    -- ** Cohort_Type
+    Cohort_Type (..),
+
+    -- ** CohortGroup
+    CohortGroup (..),
+    newCohortGroup,
+
+    -- ** ColumnHeader
+    ColumnHeader (..),
+    newColumnHeader,
+
+    -- ** CustomDimension
+    CustomDimension (..),
+    newCustomDimension,
+
+    -- ** DateRange
+    DateRange (..),
+    newDateRange,
+
+    -- ** DateRangeValues
+    DateRangeValues (..),
+    newDateRangeValues,
+
+    -- ** Dimension
+    Dimension (..),
+    newDimension,
+
+    -- ** DimensionFilter
+    DimensionFilter (..),
+    newDimensionFilter,
+
+    -- ** DimensionFilter_Operator
+    DimensionFilter_Operator (..),
+
+    -- ** DimensionFilterClause
+    DimensionFilterClause (..),
+    newDimensionFilterClause,
+
+    -- ** DimensionFilterClause_Operator
+    DimensionFilterClause_Operator (..),
+
+    -- ** DynamicSegment
+    DynamicSegment (..),
+    newDynamicSegment,
+
+    -- ** EcommerceData
+    EcommerceData (..),
+    newEcommerceData,
+
+    -- ** EcommerceData_ActionType
+    EcommerceData_ActionType (..),
+
+    -- ** EcommerceData_EcommerceType
+    EcommerceData_EcommerceType (..),
+
+    -- ** EventData
+    EventData (..),
+    newEventData,
+
+    -- ** GetReportsRequest
+    GetReportsRequest (..),
+    newGetReportsRequest,
+
+    -- ** GetReportsResponse
+    GetReportsResponse (..),
+    newGetReportsResponse,
+
+    -- ** GoalData
+    GoalData (..),
+    newGoalData,
+
+    -- ** GoalSetData
+    GoalSetData (..),
+    newGoalSetData,
+
+    -- ** Metric
+    Metric (..),
+    newMetric,
+
+    -- ** Metric_FormattingType
+    Metric_FormattingType (..),
+
+    -- ** MetricFilter
+    MetricFilter (..),
+    newMetricFilter,
+
+    -- ** MetricFilter_Operator
+    MetricFilter_Operator (..),
+
+    -- ** MetricFilterClause
+    MetricFilterClause (..),
+    newMetricFilterClause,
+
+    -- ** MetricFilterClause_Operator
+    MetricFilterClause_Operator (..),
+
+    -- ** MetricHeader
+    MetricHeader (..),
+    newMetricHeader,
+
+    -- ** MetricHeaderEntry
+    MetricHeaderEntry (..),
+    newMetricHeaderEntry,
+
+    -- ** MetricHeaderEntry_Type
+    MetricHeaderEntry_Type (..),
+
+    -- ** OrFiltersForSegment
+    OrFiltersForSegment (..),
+    newOrFiltersForSegment,
+
+    -- ** OrderBy
+    OrderBy (..),
+    newOrderBy,
+
+    -- ** OrderBy_OrderType
+    OrderBy_OrderType (..),
+
+    -- ** OrderBy_SortOrder
+    OrderBy_SortOrder (..),
+
+    -- ** PageviewData
+    PageviewData (..),
+    newPageviewData,
+
+    -- ** Pivot
+    Pivot (..),
+    newPivot,
+
+    -- ** PivotHeader
+    PivotHeader (..),
+    newPivotHeader,
+
+    -- ** PivotHeaderEntry
+    PivotHeaderEntry (..),
+    newPivotHeaderEntry,
+
+    -- ** PivotValueRegion
+    PivotValueRegion (..),
+    newPivotValueRegion,
+
+    -- ** ProductData
+    ProductData (..),
+    newProductData,
+
+    -- ** Report
+    Report (..),
+    newReport,
+
+    -- ** ReportData
+    ReportData (..),
+    newReportData,
+
+    -- ** ReportRequest
+    ReportRequest (..),
+    newReportRequest,
+
+    -- ** ReportRequest_SamplingLevel
+    ReportRequest_SamplingLevel (..),
+
+    -- ** ReportRow
+    ReportRow (..),
+    newReportRow,
+
+    -- ** ResourceQuotasRemaining
+    ResourceQuotasRemaining (..),
+    newResourceQuotasRemaining,
+
+    -- ** ScreenviewData
+    ScreenviewData (..),
+    newScreenviewData,
+
+    -- ** SearchUserActivityRequest
+    SearchUserActivityRequest (..),
+    newSearchUserActivityRequest,
+
+    -- ** SearchUserActivityRequest_ActivityTypesItem
+    SearchUserActivityRequest_ActivityTypesItem (..),
+
+    -- ** SearchUserActivityResponse
+    SearchUserActivityResponse (..),
+    newSearchUserActivityResponse,
+
+    -- ** Segment
+    Segment (..),
+    newSegment,
+
+    -- ** SegmentDefinition
+    SegmentDefinition (..),
+    newSegmentDefinition,
+
+    -- ** SegmentDimensionFilter
+    SegmentDimensionFilter (..),
+    newSegmentDimensionFilter,
+
+    -- ** SegmentDimensionFilter_Operator
+    SegmentDimensionFilter_Operator (..),
+
+    -- ** SegmentFilter
+    SegmentFilter (..),
+    newSegmentFilter,
+
+    -- ** SegmentFilterClause
+    SegmentFilterClause (..),
+    newSegmentFilterClause,
+
+    -- ** SegmentMetricFilter
+    SegmentMetricFilter (..),
+    newSegmentMetricFilter,
+
+    -- ** SegmentMetricFilter_Operator
+    SegmentMetricFilter_Operator (..),
+
+    -- ** SegmentMetricFilter_Scope
+    SegmentMetricFilter_Scope (..),
+
+    -- ** SegmentSequenceStep
+    SegmentSequenceStep (..),
+    newSegmentSequenceStep,
+
+    -- ** SegmentSequenceStep_MatchType
+    SegmentSequenceStep_MatchType (..),
+
+    -- ** SequenceSegment
+    SequenceSegment (..),
+    newSequenceSegment,
+
+    -- ** SimpleSegment
+    SimpleSegment (..),
+    newSimpleSegment,
+
+    -- ** TransactionData
+    TransactionData (..),
+    newTransactionData,
+
+    -- ** User
+    User (..),
+    newUser,
+
+    -- ** User_Type
+    User_Type (..),
+
+    -- ** UserActivitySession
+    UserActivitySession (..),
+    newUserActivitySession,
+  )
+where
+
+import Gogol.AnalyticsReporting.Internal.Product
+import Gogol.AnalyticsReporting.Internal.Sum
+import Gogol.Prelude qualified as Core
+
+-- | Default request referring to version @v4@ of the Analytics Reporting API. This contains the host and root path used as a starting point for constructing service requests.
+analyticsReportingService :: Core.ServiceConfig
+analyticsReportingService =
+  Core.defaultService
+    (Core.ServiceId "analyticsreporting:v4")
+    "analyticsreporting.googleapis.com"
+
+-- | View and manage your Google Analytics data
+type Analytics'FullControl =
+  "https://www.googleapis.com/auth/analytics"
+
+-- | See and download your Google Analytics data
+type Analytics'Readonly =
+  "https://www.googleapis.com/auth/analytics.readonly"
diff --git a/gen/Gogol/AnalyticsReporting/UserActivity/Search.hs b/gen/Gogol/AnalyticsReporting/UserActivity/Search.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AnalyticsReporting/UserActivity/Search.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AnalyticsReporting.UserActivity.Search
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns User Activity data.
+--
+-- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference> for @analyticsreporting.userActivity.search@.
+module Gogol.AnalyticsReporting.UserActivity.Search
+  ( -- * Resource
+    AnalyticsReportingUserActivitySearchResource,
+
+    -- ** Constructing a Request
+    AnalyticsReportingUserActivitySearch (..),
+    newAnalyticsReportingUserActivitySearch,
+  )
+where
+
+import Gogol.AnalyticsReporting.Types
+import Gogol.Prelude qualified as Core
+
+-- | A resource alias for @analyticsreporting.userActivity.search@ method which the
+-- 'AnalyticsReportingUserActivitySearch' request conforms to.
+type AnalyticsReportingUserActivitySearchResource =
+  "v4"
+    Core.:> "userActivity:search"
+    Core.:> Core.QueryParam "$.xgafv" Xgafv
+    Core.:> Core.QueryParam "access_token" Core.Text
+    Core.:> Core.QueryParam "callback" Core.Text
+    Core.:> Core.QueryParam "uploadType" Core.Text
+    Core.:> Core.QueryParam "upload_protocol" Core.Text
+    Core.:> Core.QueryParam "alt" Core.AltJSON
+    Core.:> Core.ReqBody '[Core.JSON] SearchUserActivityRequest
+    Core.:> Core.Post '[Core.JSON] SearchUserActivityResponse
+
+-- | Returns User Activity data.
+--
+-- /See:/ 'newAnalyticsReportingUserActivitySearch' smart constructor.
+data AnalyticsReportingUserActivitySearch = AnalyticsReportingUserActivitySearch
+  { -- | V1 error format.
+    xgafv :: (Core.Maybe Xgafv),
+    -- | OAuth access token.
+    accessToken :: (Core.Maybe Core.Text),
+    -- | JSONP
+    callback :: (Core.Maybe Core.Text),
+    -- | Multipart request metadata.
+    payload :: SearchUserActivityRequest,
+    -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+    uploadType :: (Core.Maybe Core.Text),
+    -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+    uploadProtocol :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'AnalyticsReportingUserActivitySearch' with the minimum fields required to make a request.
+newAnalyticsReportingUserActivitySearch ::
+  -- |  Multipart request metadata. See 'payload'.
+  SearchUserActivityRequest ->
+  AnalyticsReportingUserActivitySearch
+newAnalyticsReportingUserActivitySearch payload =
+  AnalyticsReportingUserActivitySearch
+    { xgafv = Core.Nothing,
+      accessToken = Core.Nothing,
+      callback = Core.Nothing,
+      payload = payload,
+      uploadType = Core.Nothing,
+      uploadProtocol = Core.Nothing
+    }
+
+instance Core.GoogleRequest AnalyticsReportingUserActivitySearch where
+  type
+    Rs AnalyticsReportingUserActivitySearch =
+      SearchUserActivityResponse
+  type
+    Scopes AnalyticsReportingUserActivitySearch =
+      '[Analytics'FullControl, Analytics'Readonly]
+  requestClient AnalyticsReportingUserActivitySearch {..} =
+    go
+      xgafv
+      accessToken
+      callback
+      uploadType
+      uploadProtocol
+      (Core.Just Core.AltJSON)
+      payload
+      analyticsReportingService
+    where
+      go =
+        Core.buildClient
+          ( Core.Proxy ::
+              Core.Proxy AnalyticsReportingUserActivitySearchResource
+          )
+          Core.mempty
diff --git a/gen/Network/Google/AnalyticsReporting.hs b/gen/Network/Google/AnalyticsReporting.hs
deleted file mode 100644
--- a/gen/Network/Google/AnalyticsReporting.hs
+++ /dev/null
@@ -1,492 +0,0 @@
-{-# LANGUAGE DataKinds         #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE TypeOperators     #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- |
--- Module      : Network.Google.AnalyticsReporting
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Accesses Analytics report data.
---
--- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference>
-module Network.Google.AnalyticsReporting
-    (
-    -- * Service Configuration
-      analyticsReportingService
-
-    -- * OAuth Scopes
-    , analyticsScope
-    , analyticsReadOnlyScope
-
-    -- * API Declaration
-    , AnalyticsReportingAPI
-
-    -- * Resources
-
-    -- ** analyticsreporting.reports.batchGet
-    , module Network.Google.Resource.AnalyticsReporting.Reports.BatchGet
-
-    -- ** analyticsreporting.userActivity.search
-    , module Network.Google.Resource.AnalyticsReporting.UserActivity.Search
-
-    -- * Types
-
-    -- ** MetricFilter
-    , MetricFilter
-    , metricFilter
-    , mfNot
-    , mfOperator
-    , mfMetricName
-    , mfComparisonValue
-
-    -- ** EventData
-    , EventData
-    , eventData
-    , edEventCategory
-    , edEventCount
-    , edEventValue
-    , edEventLabel
-    , edEventAction
-
-    -- ** MetricFilterOperator
-    , MetricFilterOperator (..)
-
-    -- ** ReportRow
-    , ReportRow
-    , reportRow
-    , rrMetrics
-    , rrDimensions
-
-    -- ** PivotHeaderEntry
-    , PivotHeaderEntry
-    , pivotHeaderEntry
-    , pheDimensionValues
-    , pheDimensionNames
-    , pheMetric
-
-    -- ** PivotValueRegion
-    , PivotValueRegion
-    , pivotValueRegion
-    , pvrValues
-
-    -- ** ReportRequest
-    , ReportRequest
-    , reportRequest
-    , rMetrics
-    , rPivots
-    , rCohortGroup
-    , rSamplingLevel
-    , rIncludeEmptyRows
-    , rDateRanges
-    , rViewId
-    , rHideTotals
-    , rHideValueRanges
-    , rMetricFilterClauses
-    , rSegments
-    , rPageToken
-    , rDimensions
-    , rDimensionFilterClauses
-    , rPageSize
-    , rOrderBys
-    , rFiltersExpression
-
-    -- ** MetricHeaderEntry
-    , MetricHeaderEntry
-    , metricHeaderEntry
-    , mheName
-    , mheType
-
-    -- ** GoalSetData
-    , GoalSetData
-    , goalSetData
-    , gsdGoals
-
-    -- ** CohortGroup
-    , CohortGroup
-    , cohortGroup
-    , cgCohorts
-    , cgLifetimeValue
-
-    -- ** SimpleSegment
-    , SimpleSegment
-    , simpleSegment
-    , ssOrFiltersForSegment
-
-    -- ** DimensionFilterClause
-    , DimensionFilterClause
-    , dimensionFilterClause
-    , dfcOperator
-    , dfcFilters
-
-    -- ** DimensionFilterClauseOperator
-    , DimensionFilterClauseOperator (..)
-
-    -- ** CohortType
-    , CohortType (..)
-
-    -- ** OrderBy
-    , OrderBy
-    , orderBy
-    , obOrderType
-    , obSortOrder
-    , obFieldName
-
-    -- ** Dimension
-    , Dimension
-    , dimension
-    , dName
-    , dHistogramBuckets
-
-    -- ** DateRangeValues
-    , DateRangeValues
-    , dateRangeValues
-    , drvPivotValueRegions
-    , drvValues
-
-    -- ** PivotHeader
-    , PivotHeader
-    , pivotHeader
-    , phTotalPivotGroupsCount
-    , phPivotHeaderEntries
-
-    -- ** SearchUserActivityRequest
-    , SearchUserActivityRequest
-    , searchUserActivityRequest
-    , suarViewId
-    , suarDateRange
-    , suarUser
-    , suarPageToken
-    , suarPageSize
-    , suarActivityTypes
-
-    -- ** MetricHeader
-    , MetricHeader
-    , metricHeader
-    , mhPivotHeaders
-    , mhMetricHeaderEntries
-
-    -- ** SegmentFilter
-    , SegmentFilter
-    , segmentFilter
-    , sfNot
-    , sfSimpleSegment
-    , sfSequenceSegment
-
-    -- ** OrderByOrderType
-    , OrderByOrderType (..)
-
-    -- ** DateRange
-    , DateRange
-    , dateRange
-    , drEndDate
-    , drStartDate
-
-    -- ** Report
-    , Report
-    , report
-    , rNextPageToken
-    , rData
-    , rColumnHeader
-
-    -- ** PageviewData
-    , PageviewData
-    , pageviewData
-    , pdPageTitle
-    , pdPagePath
-
-    -- ** EcommerceDataActionType
-    , EcommerceDataActionType (..)
-
-    -- ** ReportData
-    , ReportData
-    , reportData
-    , rdMinimums
-    , rdRows
-    , rdTotals
-    , rdSamplesReadCounts
-    , rdMaximums
-    , rdDataLastRefreshed
-    , rdRowCount
-    , rdSamplingSpaceSizes
-    , rdIsDataGolden
-
-    -- ** SegmentFilterClause
-    , SegmentFilterClause
-    , segmentFilterClause
-    , sfcMetricFilter
-    , sfcNot
-    , sfcDimensionFilter
-
-    -- ** SegmentSequenceStep
-    , SegmentSequenceStep
-    , segmentSequenceStep
-    , sssMatchType
-    , sssOrFiltersForSegment
-
-    -- ** OrFiltersForSegment
-    , OrFiltersForSegment
-    , orFiltersForSegment
-    , offsSegmentFilterClauses
-
-    -- ** SegmentDefinition
-    , SegmentDefinition
-    , segmentDefinition
-    , sdSegmentFilters
-
-    -- ** OrderBySortOrder
-    , OrderBySortOrder (..)
-
-    -- ** User
-    , User
-    , user
-    , uUserId
-    , uType
-
-    -- ** Pivot
-    , Pivot
-    , pivot
-    , pStartGroup
-    , pMetrics
-    , pMaxGroupCount
-    , pDimensions
-    , pDimensionFilterClauses
-
-    -- ** TransactionData
-    , TransactionData
-    , transactionData
-    , tdTransactionId
-    , tdTransactionTax
-    , tdTransactionShipping
-    , tdTransactionRevenue
-
-    -- ** SequenceSegment
-    , SequenceSegment
-    , sequenceSegment
-    , ssFirstStepShouldMatchFirstHit
-    , ssSegmentSequenceSteps
-
-    -- ** Metric
-    , Metric
-    , metric
-    , mFormattingType
-    , mAlias
-    , mExpression
-
-    -- ** SegmentMetricFilterOperator
-    , SegmentMetricFilterOperator (..)
-
-    -- ** MetricHeaderEntryType
-    , MetricHeaderEntryType (..)
-
-    -- ** SegmentMetricFilter
-    , SegmentMetricFilter
-    , segmentMetricFilter
-    , smfOperator
-    , smfMetricName
-    , smfMaxComparisonValue
-    , smfScope
-    , smfComparisonValue
-
-    -- ** ReportRequestSamplingLevel
-    , ReportRequestSamplingLevel (..)
-
-    -- ** Xgafv
-    , Xgafv (..)
-
-    -- ** GetReportsRequest
-    , GetReportsRequest
-    , getReportsRequest
-    , grrUseResourceQuotas
-    , grrReportRequests
-
-    -- ** UserActivitySession
-    , UserActivitySession
-    , userActivitySession
-    , uasPlatform
-    , uasDeviceCategory
-    , uasActivities
-    , uasSessionDate
-    , uasDataSource
-    , uasSessionId
-
-    -- ** SegmentSequenceStepMatchType
-    , SegmentSequenceStepMatchType (..)
-
-    -- ** GoalData
-    , GoalData
-    , goalData
-    , gdGoalPreviousStep2
-    , gdGoalName
-    , gdGoalPreviousStep3
-    , gdGoalIndex
-    , gdGoalCompletionLocation
-    , gdGoalPreviousStep1
-    , gdGoalCompletions
-    , gdGoalValue
-
-    -- ** Activity
-    , Activity
-    , activity
-    , aEvent
-    , aHostname
-    , aActivityType
-    , aMedium
-    , aPageview
-    , aCampaign
-    , aGoals
-    , aChannelGrouping
-    , aAppview
-    , aSource
-    , aActivityTime
-    , aEcommerce
-    , aCustomDimension
-    , aKeyword
-    , aLandingPagePath
-
-    -- ** Cohort
-    , Cohort
-    , cohort
-    , cDateRange
-    , cName
-    , cType
-
-    -- ** SegmentMetricFilterScope
-    , SegmentMetricFilterScope (..)
-
-    -- ** EcommerceData
-    , EcommerceData
-    , ecommerceData
-    , edEcommerceType
-    , edTransaction
-    , edProducts
-    , edActionType
-
-    -- ** EcommerceDataEcommerceType
-    , EcommerceDataEcommerceType (..)
-
-    -- ** DimensionFilter
-    , DimensionFilter
-    , dimensionFilter
-    , dfNot
-    , dfOperator
-    , dfExpressions
-    , dfDimensionName
-    , dfCaseSensitive
-
-    -- ** GetReportsResponse
-    , GetReportsResponse
-    , getReportsResponse
-    , grrReports
-    , grrResourceQuotasRemaining
-    , grrQueryCost
-
-    -- ** DimensionFilterOperator
-    , DimensionFilterOperator (..)
-
-    -- ** ActivityActivityType
-    , ActivityActivityType (..)
-
-    -- ** MetricFormattingType
-    , MetricFormattingType (..)
-
-    -- ** CustomDimension
-    , CustomDimension
-    , customDimension
-    , cdValue
-    , cdIndex
-
-    -- ** Segment
-    , Segment
-    , segment
-    , sDynamicSegment
-    , sSegmentId
-
-    -- ** ProductData
-    , ProductData
-    , productData
-    , pdProductName
-    , pdProductSKU
-    , pdItemRevenue
-    , pdProductQuantity
-
-    -- ** SegmentDimensionFilterOperator
-    , SegmentDimensionFilterOperator (..)
-
-    -- ** ResourceQuotasRemaining
-    , ResourceQuotasRemaining
-    , resourceQuotasRemaining
-    , rqrHourlyQuotaTokensRemaining
-    , rqrDailyQuotaTokensRemaining
-
-    -- ** SegmentDimensionFilter
-    , SegmentDimensionFilter
-    , segmentDimensionFilter
-    , sdfOperator
-    , sdfMinComparisonValue
-    , sdfMaxComparisonValue
-    , sdfExpressions
-    , sdfDimensionName
-    , sdfCaseSensitive
-
-    -- ** DynamicSegment
-    , DynamicSegment
-    , dynamicSegment
-    , dsUserSegment
-    , dsName
-    , dsSessionSegment
-
-    -- ** MetricFilterClause
-    , MetricFilterClause
-    , metricFilterClause
-    , mfcOperator
-    , mfcFilters
-
-    -- ** MetricFilterClauseOperator
-    , MetricFilterClauseOperator (..)
-
-    -- ** UserType
-    , UserType (..)
-
-    -- ** ColumnHeader
-    , ColumnHeader
-    , columnHeader
-    , chMetricHeader
-    , chDimensions
-
-    -- ** SearchUserActivityResponse
-    , SearchUserActivityResponse
-    , searchUserActivityResponse
-    , suarNextPageToken
-    , suarSampleRate
-    , suarSessions
-    , suarTotalRows
-
-    -- ** ScreenviewData
-    , ScreenviewData
-    , screenviewData
-    , sdMobileDeviceModel
-    , sdMobileDeviceBranding
-    , sdAppName
-    , sdScreenName
-    ) where
-
-import           Network.Google.AnalyticsReporting.Types
-import           Network.Google.Prelude
-import           Network.Google.Resource.AnalyticsReporting.Reports.BatchGet
-import           Network.Google.Resource.AnalyticsReporting.UserActivity.Search
-
-{- $resources
-TODO
--}
-
--- | Represents the entirety of the methods and resources available for the Analytics Reporting API service.
-type AnalyticsReportingAPI =
-     ReportsBatchGetResource :<|>
-       UserActivitySearchResource
diff --git a/gen/Network/Google/AnalyticsReporting/Types.hs b/gen/Network/Google/AnalyticsReporting/Types.hs
deleted file mode 100644
--- a/gen/Network/Google/AnalyticsReporting/Types.hs
+++ /dev/null
@@ -1,481 +0,0 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- |
--- Module      : Network.Google.AnalyticsReporting.Types
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.Google.AnalyticsReporting.Types
-    (
-    -- * Service Configuration
-      analyticsReportingService
-
-    -- * OAuth Scopes
-    , analyticsScope
-    , analyticsReadOnlyScope
-
-    -- * MetricFilter
-    , MetricFilter
-    , metricFilter
-    , mfNot
-    , mfOperator
-    , mfMetricName
-    , mfComparisonValue
-
-    -- * EventData
-    , EventData
-    , eventData
-    , edEventCategory
-    , edEventCount
-    , edEventValue
-    , edEventLabel
-    , edEventAction
-
-    -- * MetricFilterOperator
-    , MetricFilterOperator (..)
-
-    -- * ReportRow
-    , ReportRow
-    , reportRow
-    , rrMetrics
-    , rrDimensions
-
-    -- * PivotHeaderEntry
-    , PivotHeaderEntry
-    , pivotHeaderEntry
-    , pheDimensionValues
-    , pheDimensionNames
-    , pheMetric
-
-    -- * PivotValueRegion
-    , PivotValueRegion
-    , pivotValueRegion
-    , pvrValues
-
-    -- * ReportRequest
-    , ReportRequest
-    , reportRequest
-    , rMetrics
-    , rPivots
-    , rCohortGroup
-    , rSamplingLevel
-    , rIncludeEmptyRows
-    , rDateRanges
-    , rViewId
-    , rHideTotals
-    , rHideValueRanges
-    , rMetricFilterClauses
-    , rSegments
-    , rPageToken
-    , rDimensions
-    , rDimensionFilterClauses
-    , rPageSize
-    , rOrderBys
-    , rFiltersExpression
-
-    -- * MetricHeaderEntry
-    , MetricHeaderEntry
-    , metricHeaderEntry
-    , mheName
-    , mheType
-
-    -- * GoalSetData
-    , GoalSetData
-    , goalSetData
-    , gsdGoals
-
-    -- * CohortGroup
-    , CohortGroup
-    , cohortGroup
-    , cgCohorts
-    , cgLifetimeValue
-
-    -- * SimpleSegment
-    , SimpleSegment
-    , simpleSegment
-    , ssOrFiltersForSegment
-
-    -- * DimensionFilterClause
-    , DimensionFilterClause
-    , dimensionFilterClause
-    , dfcOperator
-    , dfcFilters
-
-    -- * DimensionFilterClauseOperator
-    , DimensionFilterClauseOperator (..)
-
-    -- * CohortType
-    , CohortType (..)
-
-    -- * OrderBy
-    , OrderBy
-    , orderBy
-    , obOrderType
-    , obSortOrder
-    , obFieldName
-
-    -- * Dimension
-    , Dimension
-    , dimension
-    , dName
-    , dHistogramBuckets
-
-    -- * DateRangeValues
-    , DateRangeValues
-    , dateRangeValues
-    , drvPivotValueRegions
-    , drvValues
-
-    -- * PivotHeader
-    , PivotHeader
-    , pivotHeader
-    , phTotalPivotGroupsCount
-    , phPivotHeaderEntries
-
-    -- * SearchUserActivityRequest
-    , SearchUserActivityRequest
-    , searchUserActivityRequest
-    , suarViewId
-    , suarDateRange
-    , suarUser
-    , suarPageToken
-    , suarPageSize
-    , suarActivityTypes
-
-    -- * MetricHeader
-    , MetricHeader
-    , metricHeader
-    , mhPivotHeaders
-    , mhMetricHeaderEntries
-
-    -- * SegmentFilter
-    , SegmentFilter
-    , segmentFilter
-    , sfNot
-    , sfSimpleSegment
-    , sfSequenceSegment
-
-    -- * OrderByOrderType
-    , OrderByOrderType (..)
-
-    -- * DateRange
-    , DateRange
-    , dateRange
-    , drEndDate
-    , drStartDate
-
-    -- * Report
-    , Report
-    , report
-    , rNextPageToken
-    , rData
-    , rColumnHeader
-
-    -- * PageviewData
-    , PageviewData
-    , pageviewData
-    , pdPageTitle
-    , pdPagePath
-
-    -- * EcommerceDataActionType
-    , EcommerceDataActionType (..)
-
-    -- * ReportData
-    , ReportData
-    , reportData
-    , rdMinimums
-    , rdRows
-    , rdTotals
-    , rdSamplesReadCounts
-    , rdMaximums
-    , rdDataLastRefreshed
-    , rdRowCount
-    , rdSamplingSpaceSizes
-    , rdIsDataGolden
-
-    -- * SegmentFilterClause
-    , SegmentFilterClause
-    , segmentFilterClause
-    , sfcMetricFilter
-    , sfcNot
-    , sfcDimensionFilter
-
-    -- * SegmentSequenceStep
-    , SegmentSequenceStep
-    , segmentSequenceStep
-    , sssMatchType
-    , sssOrFiltersForSegment
-
-    -- * OrFiltersForSegment
-    , OrFiltersForSegment
-    , orFiltersForSegment
-    , offsSegmentFilterClauses
-
-    -- * SegmentDefinition
-    , SegmentDefinition
-    , segmentDefinition
-    , sdSegmentFilters
-
-    -- * OrderBySortOrder
-    , OrderBySortOrder (..)
-
-    -- * User
-    , User
-    , user
-    , uUserId
-    , uType
-
-    -- * Pivot
-    , Pivot
-    , pivot
-    , pStartGroup
-    , pMetrics
-    , pMaxGroupCount
-    , pDimensions
-    , pDimensionFilterClauses
-
-    -- * TransactionData
-    , TransactionData
-    , transactionData
-    , tdTransactionId
-    , tdTransactionTax
-    , tdTransactionShipping
-    , tdTransactionRevenue
-
-    -- * SequenceSegment
-    , SequenceSegment
-    , sequenceSegment
-    , ssFirstStepShouldMatchFirstHit
-    , ssSegmentSequenceSteps
-
-    -- * Metric
-    , Metric
-    , metric
-    , mFormattingType
-    , mAlias
-    , mExpression
-
-    -- * SegmentMetricFilterOperator
-    , SegmentMetricFilterOperator (..)
-
-    -- * MetricHeaderEntryType
-    , MetricHeaderEntryType (..)
-
-    -- * SegmentMetricFilter
-    , SegmentMetricFilter
-    , segmentMetricFilter
-    , smfOperator
-    , smfMetricName
-    , smfMaxComparisonValue
-    , smfScope
-    , smfComparisonValue
-
-    -- * ReportRequestSamplingLevel
-    , ReportRequestSamplingLevel (..)
-
-    -- * Xgafv
-    , Xgafv (..)
-
-    -- * GetReportsRequest
-    , GetReportsRequest
-    , getReportsRequest
-    , grrUseResourceQuotas
-    , grrReportRequests
-
-    -- * UserActivitySession
-    , UserActivitySession
-    , userActivitySession
-    , uasPlatform
-    , uasDeviceCategory
-    , uasActivities
-    , uasSessionDate
-    , uasDataSource
-    , uasSessionId
-
-    -- * SegmentSequenceStepMatchType
-    , SegmentSequenceStepMatchType (..)
-
-    -- * GoalData
-    , GoalData
-    , goalData
-    , gdGoalPreviousStep2
-    , gdGoalName
-    , gdGoalPreviousStep3
-    , gdGoalIndex
-    , gdGoalCompletionLocation
-    , gdGoalPreviousStep1
-    , gdGoalCompletions
-    , gdGoalValue
-
-    -- * Activity
-    , Activity
-    , activity
-    , aEvent
-    , aHostname
-    , aActivityType
-    , aMedium
-    , aPageview
-    , aCampaign
-    , aGoals
-    , aChannelGrouping
-    , aAppview
-    , aSource
-    , aActivityTime
-    , aEcommerce
-    , aCustomDimension
-    , aKeyword
-    , aLandingPagePath
-
-    -- * Cohort
-    , Cohort
-    , cohort
-    , cDateRange
-    , cName
-    , cType
-
-    -- * SegmentMetricFilterScope
-    , SegmentMetricFilterScope (..)
-
-    -- * EcommerceData
-    , EcommerceData
-    , ecommerceData
-    , edEcommerceType
-    , edTransaction
-    , edProducts
-    , edActionType
-
-    -- * EcommerceDataEcommerceType
-    , EcommerceDataEcommerceType (..)
-
-    -- * DimensionFilter
-    , DimensionFilter
-    , dimensionFilter
-    , dfNot
-    , dfOperator
-    , dfExpressions
-    , dfDimensionName
-    , dfCaseSensitive
-
-    -- * GetReportsResponse
-    , GetReportsResponse
-    , getReportsResponse
-    , grrReports
-    , grrResourceQuotasRemaining
-    , grrQueryCost
-
-    -- * DimensionFilterOperator
-    , DimensionFilterOperator (..)
-
-    -- * ActivityActivityType
-    , ActivityActivityType (..)
-
-    -- * MetricFormattingType
-    , MetricFormattingType (..)
-
-    -- * CustomDimension
-    , CustomDimension
-    , customDimension
-    , cdValue
-    , cdIndex
-
-    -- * Segment
-    , Segment
-    , segment
-    , sDynamicSegment
-    , sSegmentId
-
-    -- * ProductData
-    , ProductData
-    , productData
-    , pdProductName
-    , pdProductSKU
-    , pdItemRevenue
-    , pdProductQuantity
-
-    -- * SegmentDimensionFilterOperator
-    , SegmentDimensionFilterOperator (..)
-
-    -- * ResourceQuotasRemaining
-    , ResourceQuotasRemaining
-    , resourceQuotasRemaining
-    , rqrHourlyQuotaTokensRemaining
-    , rqrDailyQuotaTokensRemaining
-
-    -- * SegmentDimensionFilter
-    , SegmentDimensionFilter
-    , segmentDimensionFilter
-    , sdfOperator
-    , sdfMinComparisonValue
-    , sdfMaxComparisonValue
-    , sdfExpressions
-    , sdfDimensionName
-    , sdfCaseSensitive
-
-    -- * DynamicSegment
-    , DynamicSegment
-    , dynamicSegment
-    , dsUserSegment
-    , dsName
-    , dsSessionSegment
-
-    -- * MetricFilterClause
-    , MetricFilterClause
-    , metricFilterClause
-    , mfcOperator
-    , mfcFilters
-
-    -- * MetricFilterClauseOperator
-    , MetricFilterClauseOperator (..)
-
-    -- * UserType
-    , UserType (..)
-
-    -- * ColumnHeader
-    , ColumnHeader
-    , columnHeader
-    , chMetricHeader
-    , chDimensions
-
-    -- * SearchUserActivityResponse
-    , SearchUserActivityResponse
-    , searchUserActivityResponse
-    , suarNextPageToken
-    , suarSampleRate
-    , suarSessions
-    , suarTotalRows
-
-    -- * ScreenviewData
-    , ScreenviewData
-    , screenviewData
-    , sdMobileDeviceModel
-    , sdMobileDeviceBranding
-    , sdAppName
-    , sdScreenName
-    ) where
-
-import           Network.Google.AnalyticsReporting.Types.Product
-import           Network.Google.AnalyticsReporting.Types.Sum
-import           Network.Google.Prelude
-
--- | Default request referring to version 'v4' of the Analytics Reporting API. This contains the host and root path used as a starting point for constructing service requests.
-analyticsReportingService :: ServiceConfig
-analyticsReportingService
-  = defaultService (ServiceId "analyticsreporting:v4")
-      "analyticsreporting.googleapis.com"
-
--- | View and manage your Google Analytics data
-analyticsScope :: Proxy '["https://www.googleapis.com/auth/analytics"]
-analyticsScope = Proxy
-
--- | View your Google Analytics data
-analyticsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/analytics.readonly"]
-analyticsReadOnlyScope = Proxy
diff --git a/gen/Network/Google/AnalyticsReporting/Types/Product.hs b/gen/Network/Google/AnalyticsReporting/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/Google/AnalyticsReporting/Types/Product.hs
+++ /dev/null
@@ -1,3886 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- |
--- Module      : Network.Google.AnalyticsReporting.Types.Product
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.Google.AnalyticsReporting.Types.Product where
-
-import           Network.Google.AnalyticsReporting.Types.Sum
-import           Network.Google.Prelude
-
--- | MetricFilter specifies the filter on a metric.
---
--- /See:/ 'metricFilter' smart constructor.
-data MetricFilter =
-  MetricFilter'
-    { _mfNot             :: !(Maybe Bool)
-    , _mfOperator        :: !(Maybe MetricFilterOperator)
-    , _mfMetricName      :: !(Maybe Text)
-    , _mfComparisonValue :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mfNot'
---
--- * 'mfOperator'
---
--- * 'mfMetricName'
---
--- * 'mfComparisonValue'
-metricFilter
-    :: MetricFilter
-metricFilter =
-  MetricFilter'
-    { _mfNot = Nothing
-    , _mfOperator = Nothing
-    , _mfMetricName = Nothing
-    , _mfComparisonValue = Nothing
-    }
-
-
--- | Logical \`NOT\` operator. If this boolean is set to true, then the
--- matching metric values will be excluded in the report. The default is
--- false.
-mfNot :: Lens' MetricFilter (Maybe Bool)
-mfNot = lens _mfNot (\ s a -> s{_mfNot = a})
-
--- | Is the metric \`EQUAL\`, \`LESS_THAN\` or \`GREATER_THAN\` the
--- comparisonValue, the default is \`EQUAL\`. If the operator is
--- \`IS_MISSING\`, checks if the metric is missing and would ignore the
--- comparisonValue.
-mfOperator :: Lens' MetricFilter (Maybe MetricFilterOperator)
-mfOperator
-  = lens _mfOperator (\ s a -> s{_mfOperator = a})
-
--- | The metric that will be filtered on. A metricFilter must contain a
--- metric name. A metric name can be an alias earlier defined as a metric
--- or it can also be a metric expression.
-mfMetricName :: Lens' MetricFilter (Maybe Text)
-mfMetricName
-  = lens _mfMetricName (\ s a -> s{_mfMetricName = a})
-
--- | The value to compare against.
-mfComparisonValue :: Lens' MetricFilter (Maybe Text)
-mfComparisonValue
-  = lens _mfComparisonValue
-      (\ s a -> s{_mfComparisonValue = a})
-
-instance FromJSON MetricFilter where
-        parseJSON
-          = withObject "MetricFilter"
-              (\ o ->
-                 MetricFilter' <$>
-                   (o .:? "not") <*> (o .:? "operator") <*>
-                     (o .:? "metricName")
-                     <*> (o .:? "comparisonValue"))
-
-instance ToJSON MetricFilter where
-        toJSON MetricFilter'{..}
-          = object
-              (catMaybes
-                 [("not" .=) <$> _mfNot,
-                  ("operator" .=) <$> _mfOperator,
-                  ("metricName" .=) <$> _mfMetricName,
-                  ("comparisonValue" .=) <$> _mfComparisonValue])
-
--- | Represents all the details pertaining to an event.
---
--- /See:/ 'eventData' smart constructor.
-data EventData =
-  EventData'
-    { _edEventCategory :: !(Maybe Text)
-    , _edEventCount    :: !(Maybe (Textual Int64))
-    , _edEventValue    :: !(Maybe (Textual Int64))
-    , _edEventLabel    :: !(Maybe Text)
-    , _edEventAction   :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'EventData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'edEventCategory'
---
--- * 'edEventCount'
---
--- * 'edEventValue'
---
--- * 'edEventLabel'
---
--- * 'edEventAction'
-eventData
-    :: EventData
-eventData =
-  EventData'
-    { _edEventCategory = Nothing
-    , _edEventCount = Nothing
-    , _edEventValue = Nothing
-    , _edEventLabel = Nothing
-    , _edEventAction = Nothing
-    }
-
-
--- | The object on the page that was interacted with. Eg: \'Video\'.
-edEventCategory :: Lens' EventData (Maybe Text)
-edEventCategory
-  = lens _edEventCategory
-      (\ s a -> s{_edEventCategory = a})
-
--- | Number of such events in this activity.
-edEventCount :: Lens' EventData (Maybe Int64)
-edEventCount
-  = lens _edEventCount (\ s a -> s{_edEventCount = a})
-      . mapping _Coerce
-
--- | Numeric value associated with the event.
-edEventValue :: Lens' EventData (Maybe Int64)
-edEventValue
-  = lens _edEventValue (\ s a -> s{_edEventValue = a})
-      . mapping _Coerce
-
--- | Label attached with the event.
-edEventLabel :: Lens' EventData (Maybe Text)
-edEventLabel
-  = lens _edEventLabel (\ s a -> s{_edEventLabel = a})
-
--- | Type of interaction with the object. Eg: \'play\'.
-edEventAction :: Lens' EventData (Maybe Text)
-edEventAction
-  = lens _edEventAction
-      (\ s a -> s{_edEventAction = a})
-
-instance FromJSON EventData where
-        parseJSON
-          = withObject "EventData"
-              (\ o ->
-                 EventData' <$>
-                   (o .:? "eventCategory") <*> (o .:? "eventCount") <*>
-                     (o .:? "eventValue")
-                     <*> (o .:? "eventLabel")
-                     <*> (o .:? "eventAction"))
-
-instance ToJSON EventData where
-        toJSON EventData'{..}
-          = object
-              (catMaybes
-                 [("eventCategory" .=) <$> _edEventCategory,
-                  ("eventCount" .=) <$> _edEventCount,
-                  ("eventValue" .=) <$> _edEventValue,
-                  ("eventLabel" .=) <$> _edEventLabel,
-                  ("eventAction" .=) <$> _edEventAction])
-
--- | A row in the report.
---
--- /See:/ 'reportRow' smart constructor.
-data ReportRow =
-  ReportRow'
-    { _rrMetrics    :: !(Maybe [DateRangeValues])
-    , _rrDimensions :: !(Maybe [Text])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReportRow' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrMetrics'
---
--- * 'rrDimensions'
-reportRow
-    :: ReportRow
-reportRow = ReportRow' {_rrMetrics = Nothing, _rrDimensions = Nothing}
-
-
--- | List of metrics for each requested DateRange.
-rrMetrics :: Lens' ReportRow [DateRangeValues]
-rrMetrics
-  = lens _rrMetrics (\ s a -> s{_rrMetrics = a}) .
-      _Default
-      . _Coerce
-
--- | List of requested dimensions.
-rrDimensions :: Lens' ReportRow [Text]
-rrDimensions
-  = lens _rrDimensions (\ s a -> s{_rrDimensions = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON ReportRow where
-        parseJSON
-          = withObject "ReportRow"
-              (\ o ->
-                 ReportRow' <$>
-                   (o .:? "metrics" .!= mempty) <*>
-                     (o .:? "dimensions" .!= mempty))
-
-instance ToJSON ReportRow where
-        toJSON ReportRow'{..}
-          = object
-              (catMaybes
-                 [("metrics" .=) <$> _rrMetrics,
-                  ("dimensions" .=) <$> _rrDimensions])
-
--- | The headers for the each of the metric column corresponding to the
--- metrics requested in the pivots section of the response.
---
--- /See:/ 'pivotHeaderEntry' smart constructor.
-data PivotHeaderEntry =
-  PivotHeaderEntry'
-    { _pheDimensionValues :: !(Maybe [Text])
-    , _pheDimensionNames  :: !(Maybe [Text])
-    , _pheMetric          :: !(Maybe MetricHeaderEntry)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PivotHeaderEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pheDimensionValues'
---
--- * 'pheDimensionNames'
---
--- * 'pheMetric'
-pivotHeaderEntry
-    :: PivotHeaderEntry
-pivotHeaderEntry =
-  PivotHeaderEntry'
-    { _pheDimensionValues = Nothing
-    , _pheDimensionNames = Nothing
-    , _pheMetric = Nothing
-    }
-
-
--- | The values for the dimensions in the pivot.
-pheDimensionValues :: Lens' PivotHeaderEntry [Text]
-pheDimensionValues
-  = lens _pheDimensionValues
-      (\ s a -> s{_pheDimensionValues = a})
-      . _Default
-      . _Coerce
-
--- | The name of the dimensions in the pivot response.
-pheDimensionNames :: Lens' PivotHeaderEntry [Text]
-pheDimensionNames
-  = lens _pheDimensionNames
-      (\ s a -> s{_pheDimensionNames = a})
-      . _Default
-      . _Coerce
-
--- | The metric header for the metric in the pivot.
-pheMetric :: Lens' PivotHeaderEntry (Maybe MetricHeaderEntry)
-pheMetric
-  = lens _pheMetric (\ s a -> s{_pheMetric = a})
-
-instance FromJSON PivotHeaderEntry where
-        parseJSON
-          = withObject "PivotHeaderEntry"
-              (\ o ->
-                 PivotHeaderEntry' <$>
-                   (o .:? "dimensionValues" .!= mempty) <*>
-                     (o .:? "dimensionNames" .!= mempty)
-                     <*> (o .:? "metric"))
-
-instance ToJSON PivotHeaderEntry where
-        toJSON PivotHeaderEntry'{..}
-          = object
-              (catMaybes
-                 [("dimensionValues" .=) <$> _pheDimensionValues,
-                  ("dimensionNames" .=) <$> _pheDimensionNames,
-                  ("metric" .=) <$> _pheMetric])
-
--- | The metric values in the pivot region.
---
--- /See:/ 'pivotValueRegion' smart constructor.
-newtype PivotValueRegion =
-  PivotValueRegion'
-    { _pvrValues :: Maybe [Text]
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PivotValueRegion' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pvrValues'
-pivotValueRegion
-    :: PivotValueRegion
-pivotValueRegion = PivotValueRegion' {_pvrValues = Nothing}
-
-
--- | The values of the metrics in each of the pivot regions.
-pvrValues :: Lens' PivotValueRegion [Text]
-pvrValues
-  = lens _pvrValues (\ s a -> s{_pvrValues = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON PivotValueRegion where
-        parseJSON
-          = withObject "PivotValueRegion"
-              (\ o ->
-                 PivotValueRegion' <$> (o .:? "values" .!= mempty))
-
-instance ToJSON PivotValueRegion where
-        toJSON PivotValueRegion'{..}
-          = object (catMaybes [("values" .=) <$> _pvrValues])
-
--- | The main request class which specifies the Reporting API request.
---
--- /See:/ 'reportRequest' smart constructor.
-data ReportRequest =
-  ReportRequest'
-    { _rMetrics                :: !(Maybe [Metric])
-    , _rPivots                 :: !(Maybe [Pivot])
-    , _rCohortGroup            :: !(Maybe CohortGroup)
-    , _rSamplingLevel          :: !(Maybe ReportRequestSamplingLevel)
-    , _rIncludeEmptyRows       :: !(Maybe Bool)
-    , _rDateRanges             :: !(Maybe [DateRange])
-    , _rViewId                 :: !(Maybe Text)
-    , _rHideTotals             :: !(Maybe Bool)
-    , _rHideValueRanges        :: !(Maybe Bool)
-    , _rMetricFilterClauses    :: !(Maybe [MetricFilterClause])
-    , _rSegments               :: !(Maybe [Segment])
-    , _rPageToken              :: !(Maybe Text)
-    , _rDimensions             :: !(Maybe [Dimension])
-    , _rDimensionFilterClauses :: !(Maybe [DimensionFilterClause])
-    , _rPageSize               :: !(Maybe (Textual Int32))
-    , _rOrderBys               :: !(Maybe [OrderBy])
-    , _rFiltersExpression      :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReportRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rMetrics'
---
--- * 'rPivots'
---
--- * 'rCohortGroup'
---
--- * 'rSamplingLevel'
---
--- * 'rIncludeEmptyRows'
---
--- * 'rDateRanges'
---
--- * 'rViewId'
---
--- * 'rHideTotals'
---
--- * 'rHideValueRanges'
---
--- * 'rMetricFilterClauses'
---
--- * 'rSegments'
---
--- * 'rPageToken'
---
--- * 'rDimensions'
---
--- * 'rDimensionFilterClauses'
---
--- * 'rPageSize'
---
--- * 'rOrderBys'
---
--- * 'rFiltersExpression'
-reportRequest
-    :: ReportRequest
-reportRequest =
-  ReportRequest'
-    { _rMetrics = Nothing
-    , _rPivots = Nothing
-    , _rCohortGroup = Nothing
-    , _rSamplingLevel = Nothing
-    , _rIncludeEmptyRows = Nothing
-    , _rDateRanges = Nothing
-    , _rViewId = Nothing
-    , _rHideTotals = Nothing
-    , _rHideValueRanges = Nothing
-    , _rMetricFilterClauses = Nothing
-    , _rSegments = Nothing
-    , _rPageToken = Nothing
-    , _rDimensions = Nothing
-    , _rDimensionFilterClauses = Nothing
-    , _rPageSize = Nothing
-    , _rOrderBys = Nothing
-    , _rFiltersExpression = Nothing
-    }
-
-
--- | The metrics requested. Requests must specify at least one metric.
--- Requests can have a total of 10 metrics.
-rMetrics :: Lens' ReportRequest [Metric]
-rMetrics
-  = lens _rMetrics (\ s a -> s{_rMetrics = a}) .
-      _Default
-      . _Coerce
-
--- | The pivot definitions. Requests can have a maximum of 2 pivots.
-rPivots :: Lens' ReportRequest [Pivot]
-rPivots
-  = lens _rPivots (\ s a -> s{_rPivots = a}) . _Default
-      . _Coerce
-
--- | Cohort group associated with this request. If there is a cohort group in
--- the request the \`ga:cohort\` dimension must be present. Every
--- [ReportRequest](#ReportRequest) within a \`batchGet\` method must
--- contain the same \`cohortGroup\` definition.
-rCohortGroup :: Lens' ReportRequest (Maybe CohortGroup)
-rCohortGroup
-  = lens _rCohortGroup (\ s a -> s{_rCohortGroup = a})
-
--- | The desired report
--- [sample](https:\/\/support.google.com\/analytics\/answer\/2637192) size.
--- If the the \`samplingLevel\` field is unspecified the \`DEFAULT\`
--- sampling level is used. Every [ReportRequest](#ReportRequest) within a
--- \`batchGet\` method must contain the same \`samplingLevel\` definition.
--- See [developer
--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for
--- details.
-rSamplingLevel :: Lens' ReportRequest (Maybe ReportRequestSamplingLevel)
-rSamplingLevel
-  = lens _rSamplingLevel
-      (\ s a -> s{_rSamplingLevel = a})
-
--- | If set to false, the response does not include rows if all the retrieved
--- metrics are equal to zero. The default is false which will exclude these
--- rows.
-rIncludeEmptyRows :: Lens' ReportRequest (Maybe Bool)
-rIncludeEmptyRows
-  = lens _rIncludeEmptyRows
-      (\ s a -> s{_rIncludeEmptyRows = a})
-
--- | Date ranges in the request. The request can have a maximum of 2 date
--- ranges. The response will contain a set of metric values for each
--- combination of the dimensions for each date range in the request. So, if
--- there are two date ranges, there will be two set of metric values, one
--- for the original date range and one for the second date range. The
--- \`reportRequest.dateRanges\` field should not be specified for cohorts
--- or Lifetime value requests. If a date range is not provided, the default
--- date range is (startDate: current date - 7 days, endDate: current date -
--- 1 day). Every [ReportRequest](#ReportRequest) within a \`batchGet\`
--- method must contain the same \`dateRanges\` definition.
-rDateRanges :: Lens' ReportRequest [DateRange]
-rDateRanges
-  = lens _rDateRanges (\ s a -> s{_rDateRanges = a}) .
-      _Default
-      . _Coerce
-
--- | The Analytics [view
--- ID](https:\/\/support.google.com\/analytics\/answer\/1009618) from which
--- to retrieve data. Every [ReportRequest](#ReportRequest) within a
--- \`batchGet\` method must contain the same \`viewId\`.
-rViewId :: Lens' ReportRequest (Maybe Text)
-rViewId = lens _rViewId (\ s a -> s{_rViewId = a})
-
--- | If set to true, hides the total of all metrics for all the matching
--- rows, for every date range. The default false and will return the
--- totals.
-rHideTotals :: Lens' ReportRequest (Maybe Bool)
-rHideTotals
-  = lens _rHideTotals (\ s a -> s{_rHideTotals = a})
-
--- | If set to true, hides the minimum and maximum across all matching rows.
--- The default is false and the value ranges are returned.
-rHideValueRanges :: Lens' ReportRequest (Maybe Bool)
-rHideValueRanges
-  = lens _rHideValueRanges
-      (\ s a -> s{_rHideValueRanges = a})
-
--- | The metric filter clauses. They are logically combined with the \`AND\`
--- operator. Metric filters look at only the first date range and not the
--- comparing date range. Note that filtering on metrics occurs after the
--- metrics are aggregated.
-rMetricFilterClauses :: Lens' ReportRequest [MetricFilterClause]
-rMetricFilterClauses
-  = lens _rMetricFilterClauses
-      (\ s a -> s{_rMetricFilterClauses = a})
-      . _Default
-      . _Coerce
-
--- | Segment the data returned for the request. A segment definition helps
--- look at a subset of the segment request. A request can contain up to
--- four segments. Every [ReportRequest](#ReportRequest) within a
--- \`batchGet\` method must contain the same \`segments\` definition.
--- Requests with segments must have the \`ga:segment\` dimension.
-rSegments :: Lens' ReportRequest [Segment]
-rSegments
-  = lens _rSegments (\ s a -> s{_rSegments = a}) .
-      _Default
-      . _Coerce
-
--- | A continuation token to get the next page of the results. Adding this to
--- the request will return the rows after the pageToken. The pageToken
--- should be the value returned in the nextPageToken parameter in the
--- response to the GetReports request.
-rPageToken :: Lens' ReportRequest (Maybe Text)
-rPageToken
-  = lens _rPageToken (\ s a -> s{_rPageToken = a})
-
--- | The dimensions requested. Requests can have a total of 7 dimensions.
-rDimensions :: Lens' ReportRequest [Dimension]
-rDimensions
-  = lens _rDimensions (\ s a -> s{_rDimensions = a}) .
-      _Default
-      . _Coerce
-
--- | The dimension filter clauses for filtering Dimension Values. They are
--- logically combined with the \`AND\` operator. Note that filtering occurs
--- before any dimensions are aggregated, so that the returned metrics
--- represent the total for only the relevant dimensions.
-rDimensionFilterClauses :: Lens' ReportRequest [DimensionFilterClause]
-rDimensionFilterClauses
-  = lens _rDimensionFilterClauses
-      (\ s a -> s{_rDimensionFilterClauses = a})
-      . _Default
-      . _Coerce
-
--- | Page size is for paging and specifies the maximum number of returned
--- rows. Page size should be >= 0. A query returns the default of 1,000
--- rows. The Analytics Core Reporting API returns a maximum of 100,000 rows
--- per request, no matter how many you ask for. It can also return fewer
--- rows than requested, if there aren\'t as many dimension segments as you
--- expect. For instance, there are fewer than 300 possible values for
--- \`ga:country\`, so when segmenting only by country, you can\'t get more
--- than 300 rows, even if you set \`pageSize\` to a higher value.
-rPageSize :: Lens' ReportRequest (Maybe Int32)
-rPageSize
-  = lens _rPageSize (\ s a -> s{_rPageSize = a}) .
-      mapping _Coerce
-
--- | Sort order on output rows. To compare two rows, the elements of the
--- following are applied in order until a difference is found. All date
--- ranges in the output get the same row order.
-rOrderBys :: Lens' ReportRequest [OrderBy]
-rOrderBys
-  = lens _rOrderBys (\ s a -> s{_rOrderBys = a}) .
-      _Default
-      . _Coerce
-
--- | Dimension or metric filters that restrict the data returned for your
--- request. To use the \`filtersExpression\`, supply a dimension or metric
--- on which to filter, followed by the filter expression. For example, the
--- following expression selects \`ga:browser\` dimension which starts with
--- Firefox; \`ga:browser=~^Firefox\`. For more information on dimensions
--- and metric filters, see [Filters
--- reference](https:\/\/developers.google.com\/analytics\/devguides\/reporting\/core\/v3\/reference#filters).
-rFiltersExpression :: Lens' ReportRequest (Maybe Text)
-rFiltersExpression
-  = lens _rFiltersExpression
-      (\ s a -> s{_rFiltersExpression = a})
-
-instance FromJSON ReportRequest where
-        parseJSON
-          = withObject "ReportRequest"
-              (\ o ->
-                 ReportRequest' <$>
-                   (o .:? "metrics" .!= mempty) <*>
-                     (o .:? "pivots" .!= mempty)
-                     <*> (o .:? "cohortGroup")
-                     <*> (o .:? "samplingLevel")
-                     <*> (o .:? "includeEmptyRows")
-                     <*> (o .:? "dateRanges" .!= mempty)
-                     <*> (o .:? "viewId")
-                     <*> (o .:? "hideTotals")
-                     <*> (o .:? "hideValueRanges")
-                     <*> (o .:? "metricFilterClauses" .!= mempty)
-                     <*> (o .:? "segments" .!= mempty)
-                     <*> (o .:? "pageToken")
-                     <*> (o .:? "dimensions" .!= mempty)
-                     <*> (o .:? "dimensionFilterClauses" .!= mempty)
-                     <*> (o .:? "pageSize")
-                     <*> (o .:? "orderBys" .!= mempty)
-                     <*> (o .:? "filtersExpression"))
-
-instance ToJSON ReportRequest where
-        toJSON ReportRequest'{..}
-          = object
-              (catMaybes
-                 [("metrics" .=) <$> _rMetrics,
-                  ("pivots" .=) <$> _rPivots,
-                  ("cohortGroup" .=) <$> _rCohortGroup,
-                  ("samplingLevel" .=) <$> _rSamplingLevel,
-                  ("includeEmptyRows" .=) <$> _rIncludeEmptyRows,
-                  ("dateRanges" .=) <$> _rDateRanges,
-                  ("viewId" .=) <$> _rViewId,
-                  ("hideTotals" .=) <$> _rHideTotals,
-                  ("hideValueRanges" .=) <$> _rHideValueRanges,
-                  ("metricFilterClauses" .=) <$> _rMetricFilterClauses,
-                  ("segments" .=) <$> _rSegments,
-                  ("pageToken" .=) <$> _rPageToken,
-                  ("dimensions" .=) <$> _rDimensions,
-                  ("dimensionFilterClauses" .=) <$>
-                    _rDimensionFilterClauses,
-                  ("pageSize" .=) <$> _rPageSize,
-                  ("orderBys" .=) <$> _rOrderBys,
-                  ("filtersExpression" .=) <$> _rFiltersExpression])
-
--- | Header for the metrics.
---
--- /See:/ 'metricHeaderEntry' smart constructor.
-data MetricHeaderEntry =
-  MetricHeaderEntry'
-    { _mheName :: !(Maybe Text)
-    , _mheType :: !(Maybe MetricHeaderEntryType)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricHeaderEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mheName'
---
--- * 'mheType'
-metricHeaderEntry
-    :: MetricHeaderEntry
-metricHeaderEntry = MetricHeaderEntry' {_mheName = Nothing, _mheType = Nothing}
-
-
--- | The name of the header.
-mheName :: Lens' MetricHeaderEntry (Maybe Text)
-mheName = lens _mheName (\ s a -> s{_mheName = a})
-
--- | The type of the metric, for example \`INTEGER\`.
-mheType :: Lens' MetricHeaderEntry (Maybe MetricHeaderEntryType)
-mheType = lens _mheType (\ s a -> s{_mheType = a})
-
-instance FromJSON MetricHeaderEntry where
-        parseJSON
-          = withObject "MetricHeaderEntry"
-              (\ o ->
-                 MetricHeaderEntry' <$>
-                   (o .:? "name") <*> (o .:? "type"))
-
-instance ToJSON MetricHeaderEntry where
-        toJSON MetricHeaderEntry'{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _mheName, ("type" .=) <$> _mheType])
-
--- | Represents a set of goals that were reached in an activity.
---
--- /See:/ 'goalSetData' smart constructor.
-newtype GoalSetData =
-  GoalSetData'
-    { _gsdGoals :: Maybe [GoalData]
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GoalSetData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gsdGoals'
-goalSetData
-    :: GoalSetData
-goalSetData = GoalSetData' {_gsdGoals = Nothing}
-
-
--- | All the goals that were reached in the current activity.
-gsdGoals :: Lens' GoalSetData [GoalData]
-gsdGoals
-  = lens _gsdGoals (\ s a -> s{_gsdGoals = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON GoalSetData where
-        parseJSON
-          = withObject "GoalSetData"
-              (\ o -> GoalSetData' <$> (o .:? "goals" .!= mempty))
-
-instance ToJSON GoalSetData where
-        toJSON GoalSetData'{..}
-          = object (catMaybes [("goals" .=) <$> _gsdGoals])
-
--- | Defines a cohort group. For example: \"cohortGroup\": { \"cohorts\": [{
--- \"name\": \"cohort 1\", \"type\": \"FIRST_VISIT_DATE\", \"dateRange\": {
--- \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" } },{
--- \"name\": \"cohort 2\" \"type\": \"FIRST_VISIT_DATE\" \"dateRange\": {
--- \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" } }] }
---
--- /See:/ 'cohortGroup' smart constructor.
-data CohortGroup =
-  CohortGroup'
-    { _cgCohorts       :: !(Maybe [Cohort])
-    , _cgLifetimeValue :: !(Maybe Bool)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CohortGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cgCohorts'
---
--- * 'cgLifetimeValue'
-cohortGroup
-    :: CohortGroup
-cohortGroup = CohortGroup' {_cgCohorts = Nothing, _cgLifetimeValue = Nothing}
-
-
--- | The definition for the cohort.
-cgCohorts :: Lens' CohortGroup [Cohort]
-cgCohorts
-  = lens _cgCohorts (\ s a -> s{_cgCohorts = a}) .
-      _Default
-      . _Coerce
-
--- | Enable Life Time Value (LTV). LTV measures lifetime value for users
--- acquired through different channels. Please see: [Cohort
--- Analysis](https:\/\/support.google.com\/analytics\/answer\/6074676) and
--- [Lifetime
--- Value](https:\/\/support.google.com\/analytics\/answer\/6182550) If the
--- value of lifetimeValue is false: - The metric values are similar to the
--- values in the web interface cohort report. - The cohort definition date
--- ranges must be aligned to the calendar week and month. i.e. while
--- requesting \`ga:cohortNthWeek\` the \`startDate\` in the cohort
--- definition should be a Sunday and the \`endDate\` should be the
--- following Saturday, and for \`ga:cohortNthMonth\`, the \`startDate\`
--- should be the 1st of the month and \`endDate\` should be the last day of
--- the month. When the lifetimeValue is true: - The metric values will
--- correspond to the values in the web interface LifeTime value report. -
--- The Lifetime Value report shows you how user value (Revenue) and
--- engagement (Appviews, Goal Completions, Sessions, and Session Duration)
--- grow during the 90 days after a user is acquired. - The metrics are
--- calculated as a cumulative average per user per the time increment. -
--- The cohort definition date ranges need not be aligned to the calendar
--- week and month boundaries. - The \`viewId\` must be an [app view
--- ID](https:\/\/support.google.com\/analytics\/answer\/2649553#WebVersusAppViews)
-cgLifetimeValue :: Lens' CohortGroup (Maybe Bool)
-cgLifetimeValue
-  = lens _cgLifetimeValue
-      (\ s a -> s{_cgLifetimeValue = a})
-
-instance FromJSON CohortGroup where
-        parseJSON
-          = withObject "CohortGroup"
-              (\ o ->
-                 CohortGroup' <$>
-                   (o .:? "cohorts" .!= mempty) <*>
-                     (o .:? "lifetimeValue"))
-
-instance ToJSON CohortGroup where
-        toJSON CohortGroup'{..}
-          = object
-              (catMaybes
-                 [("cohorts" .=) <$> _cgCohorts,
-                  ("lifetimeValue" .=) <$> _cgLifetimeValue])
-
--- | A Simple segment conditions consist of one or more dimension\/metric
--- conditions that can be combined.
---
--- /See:/ 'simpleSegment' smart constructor.
-newtype SimpleSegment =
-  SimpleSegment'
-    { _ssOrFiltersForSegment :: Maybe [OrFiltersForSegment]
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SimpleSegment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssOrFiltersForSegment'
-simpleSegment
-    :: SimpleSegment
-simpleSegment = SimpleSegment' {_ssOrFiltersForSegment = Nothing}
-
-
--- | A list of segment filters groups which are combined with logical \`AND\`
--- operator.
-ssOrFiltersForSegment :: Lens' SimpleSegment [OrFiltersForSegment]
-ssOrFiltersForSegment
-  = lens _ssOrFiltersForSegment
-      (\ s a -> s{_ssOrFiltersForSegment = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON SimpleSegment where
-        parseJSON
-          = withObject "SimpleSegment"
-              (\ o ->
-                 SimpleSegment' <$>
-                   (o .:? "orFiltersForSegment" .!= mempty))
-
-instance ToJSON SimpleSegment where
-        toJSON SimpleSegment'{..}
-          = object
-              (catMaybes
-                 [("orFiltersForSegment" .=) <$>
-                    _ssOrFiltersForSegment])
-
--- | A group of dimension filters. Set the operator value to specify how the
--- filters are logically combined.
---
--- /See:/ 'dimensionFilterClause' smart constructor.
-data DimensionFilterClause =
-  DimensionFilterClause'
-    { _dfcOperator :: !(Maybe DimensionFilterClauseOperator)
-    , _dfcFilters  :: !(Maybe [DimensionFilter])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DimensionFilterClause' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfcOperator'
---
--- * 'dfcFilters'
-dimensionFilterClause
-    :: DimensionFilterClause
-dimensionFilterClause =
-  DimensionFilterClause' {_dfcOperator = Nothing, _dfcFilters = Nothing}
-
-
--- | The operator for combining multiple dimension filters. If unspecified,
--- it is treated as an \`OR\`.
-dfcOperator :: Lens' DimensionFilterClause (Maybe DimensionFilterClauseOperator)
-dfcOperator
-  = lens _dfcOperator (\ s a -> s{_dfcOperator = a})
-
--- | The repeated set of filters. They are logically combined based on the
--- operator specified.
-dfcFilters :: Lens' DimensionFilterClause [DimensionFilter]
-dfcFilters
-  = lens _dfcFilters (\ s a -> s{_dfcFilters = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON DimensionFilterClause where
-        parseJSON
-          = withObject "DimensionFilterClause"
-              (\ o ->
-                 DimensionFilterClause' <$>
-                   (o .:? "operator") <*> (o .:? "filters" .!= mempty))
-
-instance ToJSON DimensionFilterClause where
-        toJSON DimensionFilterClause'{..}
-          = object
-              (catMaybes
-                 [("operator" .=) <$> _dfcOperator,
-                  ("filters" .=) <$> _dfcFilters])
-
--- | Specifies the sorting options.
---
--- /See:/ 'orderBy' smart constructor.
-data OrderBy =
-  OrderBy'
-    { _obOrderType :: !(Maybe OrderByOrderType)
-    , _obSortOrder :: !(Maybe OrderBySortOrder)
-    , _obFieldName :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'OrderBy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'obOrderType'
---
--- * 'obSortOrder'
---
--- * 'obFieldName'
-orderBy
-    :: OrderBy
-orderBy =
-  OrderBy'
-    {_obOrderType = Nothing, _obSortOrder = Nothing, _obFieldName = Nothing}
-
-
--- | The order type. The default orderType is \`VALUE\`.
-obOrderType :: Lens' OrderBy (Maybe OrderByOrderType)
-obOrderType
-  = lens _obOrderType (\ s a -> s{_obOrderType = a})
-
--- | The sorting order for the field.
-obSortOrder :: Lens' OrderBy (Maybe OrderBySortOrder)
-obSortOrder
-  = lens _obSortOrder (\ s a -> s{_obSortOrder = a})
-
--- | The field which to sort by. The default sort order is ascending.
--- Example: \`ga:browser\`. Note, that you can only specify one field for
--- sort here. For example, \`ga:browser, ga:city\` is not valid.
-obFieldName :: Lens' OrderBy (Maybe Text)
-obFieldName
-  = lens _obFieldName (\ s a -> s{_obFieldName = a})
-
-instance FromJSON OrderBy where
-        parseJSON
-          = withObject "OrderBy"
-              (\ o ->
-                 OrderBy' <$>
-                   (o .:? "orderType") <*> (o .:? "sortOrder") <*>
-                     (o .:? "fieldName"))
-
-instance ToJSON OrderBy where
-        toJSON OrderBy'{..}
-          = object
-              (catMaybes
-                 [("orderType" .=) <$> _obOrderType,
-                  ("sortOrder" .=) <$> _obSortOrder,
-                  ("fieldName" .=) <$> _obFieldName])
-
--- | [Dimensions](https:\/\/support.google.com\/analytics\/answer\/1033861)
--- are attributes of your data. For example, the dimension \`ga:city\`
--- indicates the city, for example, \"Paris\" or \"New York\", from which a
--- session originates.
---
--- /See:/ 'dimension' smart constructor.
-data Dimension =
-  Dimension'
-    { _dName             :: !(Maybe Text)
-    , _dHistogramBuckets :: !(Maybe [Textual Int64])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Dimension' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dName'
---
--- * 'dHistogramBuckets'
-dimension
-    :: Dimension
-dimension = Dimension' {_dName = Nothing, _dHistogramBuckets = Nothing}
-
-
--- | Name of the dimension to fetch, for example \`ga:browser\`.
-dName :: Lens' Dimension (Maybe Text)
-dName = lens _dName (\ s a -> s{_dName = a})
-
--- | If non-empty, we place dimension values into buckets after string to
--- int64. Dimension values that are not the string representation of an
--- integral value will be converted to zero. The bucket values have to be
--- in increasing order. Each bucket is closed on the lower end, and open on
--- the upper end. The \"first\" bucket includes all values less than the
--- first boundary, the \"last\" bucket includes all values up to infinity.
--- Dimension values that fall in a bucket get transformed to a new
--- dimension value. For example, if one gives a list of \"0, 1, 3, 4, 7\",
--- then we return the following buckets: - bucket #1: values \< 0,
--- dimension value \"\<0\" - bucket #2: values in [0,1), dimension value
--- \"0\" - bucket #3: values in [1,3), dimension value \"1-2\" - bucket #4:
--- values in [3,4), dimension value \"3\" - bucket #5: values in [4,7),
--- dimension value \"4-6\" - bucket #6: values >= 7, dimension value \"7+\"
--- NOTE: If you are applying histogram mutation on any dimension, and using
--- that dimension in sort, you will want to use the sort type
--- \`HISTOGRAM_BUCKET\` for that purpose. Without that the dimension values
--- will be sorted according to dictionary (lexicographic) order. For
--- example the ascending dictionary order is: \"\<50\", \"1001+\",
--- \"121-1000\", \"50-120\" And the ascending \`HISTOGRAM_BUCKET\` order
--- is: \"\<50\", \"50-120\", \"121-1000\", \"1001+\" The client has to
--- explicitly request \`\"orderType\": \"HISTOGRAM_BUCKET\"\` for a
--- histogram-mutated dimension.
-dHistogramBuckets :: Lens' Dimension [Int64]
-dHistogramBuckets
-  = lens _dHistogramBuckets
-      (\ s a -> s{_dHistogramBuckets = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON Dimension where
-        parseJSON
-          = withObject "Dimension"
-              (\ o ->
-                 Dimension' <$>
-                   (o .:? "name") <*>
-                     (o .:? "histogramBuckets" .!= mempty))
-
-instance ToJSON Dimension where
-        toJSON Dimension'{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _dName,
-                  ("histogramBuckets" .=) <$> _dHistogramBuckets])
-
--- | Used to return a list of metrics for a single DateRange \/ dimension
--- combination
---
--- /See:/ 'dateRangeValues' smart constructor.
-data DateRangeValues =
-  DateRangeValues'
-    { _drvPivotValueRegions :: !(Maybe [PivotValueRegion])
-    , _drvValues            :: !(Maybe [Text])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DateRangeValues' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drvPivotValueRegions'
---
--- * 'drvValues'
-dateRangeValues
-    :: DateRangeValues
-dateRangeValues =
-  DateRangeValues' {_drvPivotValueRegions = Nothing, _drvValues = Nothing}
-
-
--- | The values of each pivot region.
-drvPivotValueRegions :: Lens' DateRangeValues [PivotValueRegion]
-drvPivotValueRegions
-  = lens _drvPivotValueRegions
-      (\ s a -> s{_drvPivotValueRegions = a})
-      . _Default
-      . _Coerce
-
--- | Each value corresponds to each Metric in the request.
-drvValues :: Lens' DateRangeValues [Text]
-drvValues
-  = lens _drvValues (\ s a -> s{_drvValues = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON DateRangeValues where
-        parseJSON
-          = withObject "DateRangeValues"
-              (\ o ->
-                 DateRangeValues' <$>
-                   (o .:? "pivotValueRegions" .!= mempty) <*>
-                     (o .:? "values" .!= mempty))
-
-instance ToJSON DateRangeValues where
-        toJSON DateRangeValues'{..}
-          = object
-              (catMaybes
-                 [("pivotValueRegions" .=) <$> _drvPivotValueRegions,
-                  ("values" .=) <$> _drvValues])
-
--- | The headers for each of the pivot sections defined in the request.
---
--- /See:/ 'pivotHeader' smart constructor.
-data PivotHeader =
-  PivotHeader'
-    { _phTotalPivotGroupsCount :: !(Maybe (Textual Int32))
-    , _phPivotHeaderEntries    :: !(Maybe [PivotHeaderEntry])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PivotHeader' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'phTotalPivotGroupsCount'
---
--- * 'phPivotHeaderEntries'
-pivotHeader
-    :: PivotHeader
-pivotHeader =
-  PivotHeader'
-    {_phTotalPivotGroupsCount = Nothing, _phPivotHeaderEntries = Nothing}
-
-
--- | The total number of groups for this pivot.
-phTotalPivotGroupsCount :: Lens' PivotHeader (Maybe Int32)
-phTotalPivotGroupsCount
-  = lens _phTotalPivotGroupsCount
-      (\ s a -> s{_phTotalPivotGroupsCount = a})
-      . mapping _Coerce
-
--- | A single pivot section header.
-phPivotHeaderEntries :: Lens' PivotHeader [PivotHeaderEntry]
-phPivotHeaderEntries
-  = lens _phPivotHeaderEntries
-      (\ s a -> s{_phPivotHeaderEntries = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON PivotHeader where
-        parseJSON
-          = withObject "PivotHeader"
-              (\ o ->
-                 PivotHeader' <$>
-                   (o .:? "totalPivotGroupsCount") <*>
-                     (o .:? "pivotHeaderEntries" .!= mempty))
-
-instance ToJSON PivotHeader where
-        toJSON PivotHeader'{..}
-          = object
-              (catMaybes
-                 [("totalPivotGroupsCount" .=) <$>
-                    _phTotalPivotGroupsCount,
-                  ("pivotHeaderEntries" .=) <$> _phPivotHeaderEntries])
-
--- | The request to fetch User Report from Reporting API \`userActivity:get\`
--- call.
---
--- /See:/ 'searchUserActivityRequest' smart constructor.
-data SearchUserActivityRequest =
-  SearchUserActivityRequest'
-    { _suarViewId        :: !(Maybe Text)
-    , _suarDateRange     :: !(Maybe DateRange)
-    , _suarUser          :: !(Maybe User)
-    , _suarPageToken     :: !(Maybe Text)
-    , _suarPageSize      :: !(Maybe (Textual Int32))
-    , _suarActivityTypes :: !(Maybe [Text])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchUserActivityRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'suarViewId'
---
--- * 'suarDateRange'
---
--- * 'suarUser'
---
--- * 'suarPageToken'
---
--- * 'suarPageSize'
---
--- * 'suarActivityTypes'
-searchUserActivityRequest
-    :: SearchUserActivityRequest
-searchUserActivityRequest =
-  SearchUserActivityRequest'
-    { _suarViewId = Nothing
-    , _suarDateRange = Nothing
-    , _suarUser = Nothing
-    , _suarPageToken = Nothing
-    , _suarPageSize = Nothing
-    , _suarActivityTypes = Nothing
-    }
-
-
--- | Required. The Analytics [view
--- ID](https:\/\/support.google.com\/analytics\/answer\/1009618) from which
--- to retrieve data. Every
--- [SearchUserActivityRequest](#SearchUserActivityRequest) must contain the
--- \`viewId\`.
-suarViewId :: Lens' SearchUserActivityRequest (Maybe Text)
-suarViewId
-  = lens _suarViewId (\ s a -> s{_suarViewId = a})
-
--- | Date range for which to retrieve the user activity. If a date range is
--- not provided, the default date range is (startDate: current date - 7
--- days, endDate: current date - 1 day).
-suarDateRange :: Lens' SearchUserActivityRequest (Maybe DateRange)
-suarDateRange
-  = lens _suarDateRange
-      (\ s a -> s{_suarDateRange = a})
-
--- | Required. Unique user Id to query for. Every
--- [SearchUserActivityRequest](#SearchUserActivityRequest) must contain
--- this field.
-suarUser :: Lens' SearchUserActivityRequest (Maybe User)
-suarUser = lens _suarUser (\ s a -> s{_suarUser = a})
-
--- | A continuation token to get the next page of the results. Adding this to
--- the request will return the rows after the pageToken. The pageToken
--- should be the value returned in the nextPageToken parameter in the
--- response to the [SearchUserActivityRequest](#SearchUserActivityRequest)
--- request.
-suarPageToken :: Lens' SearchUserActivityRequest (Maybe Text)
-suarPageToken
-  = lens _suarPageToken
-      (\ s a -> s{_suarPageToken = a})
-
--- | Page size is for paging and specifies the maximum number of returned
--- rows. Page size should be > 0. If the value is 0 or if the field isn\'t
--- specified, the request returns the default of 1000 rows per page.
-suarPageSize :: Lens' SearchUserActivityRequest (Maybe Int32)
-suarPageSize
-  = lens _suarPageSize (\ s a -> s{_suarPageSize = a})
-      . mapping _Coerce
-
--- | Set of all activity types being requested. Only acvities matching these
--- types will be returned in the response. If empty, all activies will be
--- returned.
-suarActivityTypes :: Lens' SearchUserActivityRequest [Text]
-suarActivityTypes
-  = lens _suarActivityTypes
-      (\ s a -> s{_suarActivityTypes = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON SearchUserActivityRequest where
-        parseJSON
-          = withObject "SearchUserActivityRequest"
-              (\ o ->
-                 SearchUserActivityRequest' <$>
-                   (o .:? "viewId") <*> (o .:? "dateRange") <*>
-                     (o .:? "user")
-                     <*> (o .:? "pageToken")
-                     <*> (o .:? "pageSize")
-                     <*> (o .:? "activityTypes" .!= mempty))
-
-instance ToJSON SearchUserActivityRequest where
-        toJSON SearchUserActivityRequest'{..}
-          = object
-              (catMaybes
-                 [("viewId" .=) <$> _suarViewId,
-                  ("dateRange" .=) <$> _suarDateRange,
-                  ("user" .=) <$> _suarUser,
-                  ("pageToken" .=) <$> _suarPageToken,
-                  ("pageSize" .=) <$> _suarPageSize,
-                  ("activityTypes" .=) <$> _suarActivityTypes])
-
--- | The headers for the metrics.
---
--- /See:/ 'metricHeader' smart constructor.
-data MetricHeader =
-  MetricHeader'
-    { _mhPivotHeaders        :: !(Maybe [PivotHeader])
-    , _mhMetricHeaderEntries :: !(Maybe [MetricHeaderEntry])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricHeader' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mhPivotHeaders'
---
--- * 'mhMetricHeaderEntries'
-metricHeader
-    :: MetricHeader
-metricHeader =
-  MetricHeader' {_mhPivotHeaders = Nothing, _mhMetricHeaderEntries = Nothing}
-
-
--- | Headers for the pivots in the response.
-mhPivotHeaders :: Lens' MetricHeader [PivotHeader]
-mhPivotHeaders
-  = lens _mhPivotHeaders
-      (\ s a -> s{_mhPivotHeaders = a})
-      . _Default
-      . _Coerce
-
--- | Headers for the metrics in the response.
-mhMetricHeaderEntries :: Lens' MetricHeader [MetricHeaderEntry]
-mhMetricHeaderEntries
-  = lens _mhMetricHeaderEntries
-      (\ s a -> s{_mhMetricHeaderEntries = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON MetricHeader where
-        parseJSON
-          = withObject "MetricHeader"
-              (\ o ->
-                 MetricHeader' <$>
-                   (o .:? "pivotHeaders" .!= mempty) <*>
-                     (o .:? "metricHeaderEntries" .!= mempty))
-
-instance ToJSON MetricHeader where
-        toJSON MetricHeader'{..}
-          = object
-              (catMaybes
-                 [("pivotHeaders" .=) <$> _mhPivotHeaders,
-                  ("metricHeaderEntries" .=) <$>
-                    _mhMetricHeaderEntries])
-
--- | SegmentFilter defines the segment to be either a simple or a sequence
--- segment. A simple segment condition contains dimension and metric
--- conditions to select the sessions or users. A sequence segment condition
--- can be used to select users or sessions based on sequential conditions.
---
--- /See:/ 'segmentFilter' smart constructor.
-data SegmentFilter =
-  SegmentFilter'
-    { _sfNot             :: !(Maybe Bool)
-    , _sfSimpleSegment   :: !(Maybe SimpleSegment)
-    , _sfSequenceSegment :: !(Maybe SequenceSegment)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SegmentFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfNot'
---
--- * 'sfSimpleSegment'
---
--- * 'sfSequenceSegment'
-segmentFilter
-    :: SegmentFilter
-segmentFilter =
-  SegmentFilter'
-    {_sfNot = Nothing, _sfSimpleSegment = Nothing, _sfSequenceSegment = Nothing}
-
-
--- | If true, match the complement of simple or sequence segment. For
--- example, to match all visits not from \"New York\", we can define the
--- segment as follows: \"sessionSegment\": { \"segmentFilters\": [{
--- \"simpleSegment\" :{ \"orFiltersForSegment\": [{
--- \"segmentFilterClauses\":[{ \"dimensionFilter\": { \"dimensionName\":
--- \"ga:city\", \"expressions\": [\"New York\"] } }] }] }, \"not\":
--- \"True\" }] },
-sfNot :: Lens' SegmentFilter (Maybe Bool)
-sfNot = lens _sfNot (\ s a -> s{_sfNot = a})
-
--- | A Simple segment conditions consist of one or more dimension\/metric
--- conditions that can be combined
-sfSimpleSegment :: Lens' SegmentFilter (Maybe SimpleSegment)
-sfSimpleSegment
-  = lens _sfSimpleSegment
-      (\ s a -> s{_sfSimpleSegment = a})
-
--- | Sequence conditions consist of one or more steps, where each step is
--- defined by one or more dimension\/metric conditions. Multiple steps can
--- be combined with special sequence operators.
-sfSequenceSegment :: Lens' SegmentFilter (Maybe SequenceSegment)
-sfSequenceSegment
-  = lens _sfSequenceSegment
-      (\ s a -> s{_sfSequenceSegment = a})
-
-instance FromJSON SegmentFilter where
-        parseJSON
-          = withObject "SegmentFilter"
-              (\ o ->
-                 SegmentFilter' <$>
-                   (o .:? "not") <*> (o .:? "simpleSegment") <*>
-                     (o .:? "sequenceSegment"))
-
-instance ToJSON SegmentFilter where
-        toJSON SegmentFilter'{..}
-          = object
-              (catMaybes
-                 [("not" .=) <$> _sfNot,
-                  ("simpleSegment" .=) <$> _sfSimpleSegment,
-                  ("sequenceSegment" .=) <$> _sfSequenceSegment])
-
--- | A contiguous set of days: startDate, startDate + 1 day, ..., endDate.
--- The start and end dates are specified in
--- [ISO8601](https:\/\/en.wikipedia.org\/wiki\/ISO_8601) date format
--- \`YYYY-MM-DD\`.
---
--- /See:/ 'dateRange' smart constructor.
-data DateRange =
-  DateRange'
-    { _drEndDate   :: !(Maybe Text)
-    , _drStartDate :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DateRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drEndDate'
---
--- * 'drStartDate'
-dateRange
-    :: DateRange
-dateRange = DateRange' {_drEndDate = Nothing, _drStartDate = Nothing}
-
-
--- | The end date for the query in the format \`YYYY-MM-DD\`.
-drEndDate :: Lens' DateRange (Maybe Text)
-drEndDate
-  = lens _drEndDate (\ s a -> s{_drEndDate = a})
-
--- | The start date for the query in the format \`YYYY-MM-DD\`.
-drStartDate :: Lens' DateRange (Maybe Text)
-drStartDate
-  = lens _drStartDate (\ s a -> s{_drStartDate = a})
-
-instance FromJSON DateRange where
-        parseJSON
-          = withObject "DateRange"
-              (\ o ->
-                 DateRange' <$>
-                   (o .:? "endDate") <*> (o .:? "startDate"))
-
-instance ToJSON DateRange where
-        toJSON DateRange'{..}
-          = object
-              (catMaybes
-                 [("endDate" .=) <$> _drEndDate,
-                  ("startDate" .=) <$> _drStartDate])
-
--- | The data response corresponding to the request.
---
--- /See:/ 'report' smart constructor.
-data Report =
-  Report'
-    { _rNextPageToken :: !(Maybe Text)
-    , _rData          :: !(Maybe ReportData)
-    , _rColumnHeader  :: !(Maybe ColumnHeader)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Report' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rNextPageToken'
---
--- * 'rData'
---
--- * 'rColumnHeader'
-report
-    :: Report
-report =
-  Report'
-    {_rNextPageToken = Nothing, _rData = Nothing, _rColumnHeader = Nothing}
-
-
--- | Page token to retrieve the next page of results in the list.
-rNextPageToken :: Lens' Report (Maybe Text)
-rNextPageToken
-  = lens _rNextPageToken
-      (\ s a -> s{_rNextPageToken = a})
-
--- | Response data.
-rData :: Lens' Report (Maybe ReportData)
-rData = lens _rData (\ s a -> s{_rData = a})
-
--- | The column headers.
-rColumnHeader :: Lens' Report (Maybe ColumnHeader)
-rColumnHeader
-  = lens _rColumnHeader
-      (\ s a -> s{_rColumnHeader = a})
-
-instance FromJSON Report where
-        parseJSON
-          = withObject "Report"
-              (\ o ->
-                 Report' <$>
-                   (o .:? "nextPageToken") <*> (o .:? "data") <*>
-                     (o .:? "columnHeader"))
-
-instance ToJSON Report where
-        toJSON Report'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _rNextPageToken,
-                  ("data" .=) <$> _rData,
-                  ("columnHeader" .=) <$> _rColumnHeader])
-
--- | Represents details collected when the visitor views a page.
---
--- /See:/ 'pageviewData' smart constructor.
-data PageviewData =
-  PageviewData'
-    { _pdPageTitle :: !(Maybe Text)
-    , _pdPagePath  :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PageviewData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdPageTitle'
---
--- * 'pdPagePath'
-pageviewData
-    :: PageviewData
-pageviewData = PageviewData' {_pdPageTitle = Nothing, _pdPagePath = Nothing}
-
-
--- | The title of the page that the visitor viewed.
-pdPageTitle :: Lens' PageviewData (Maybe Text)
-pdPageTitle
-  = lens _pdPageTitle (\ s a -> s{_pdPageTitle = a})
-
--- | The URL of the page that the visitor viewed.
-pdPagePath :: Lens' PageviewData (Maybe Text)
-pdPagePath
-  = lens _pdPagePath (\ s a -> s{_pdPagePath = a})
-
-instance FromJSON PageviewData where
-        parseJSON
-          = withObject "PageviewData"
-              (\ o ->
-                 PageviewData' <$>
-                   (o .:? "pageTitle") <*> (o .:? "pagePath"))
-
-instance ToJSON PageviewData where
-        toJSON PageviewData'{..}
-          = object
-              (catMaybes
-                 [("pageTitle" .=) <$> _pdPageTitle,
-                  ("pagePath" .=) <$> _pdPagePath])
-
--- | The data part of the report.
---
--- /See:/ 'reportData' smart constructor.
-data ReportData =
-  ReportData'
-    { _rdMinimums           :: !(Maybe [DateRangeValues])
-    , _rdRows               :: !(Maybe [ReportRow])
-    , _rdTotals             :: !(Maybe [DateRangeValues])
-    , _rdSamplesReadCounts  :: !(Maybe [Textual Int64])
-    , _rdMaximums           :: !(Maybe [DateRangeValues])
-    , _rdDataLastRefreshed  :: !(Maybe DateTime')
-    , _rdRowCount           :: !(Maybe (Textual Int32))
-    , _rdSamplingSpaceSizes :: !(Maybe [Textual Int64])
-    , _rdIsDataGolden       :: !(Maybe Bool)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReportData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rdMinimums'
---
--- * 'rdRows'
---
--- * 'rdTotals'
---
--- * 'rdSamplesReadCounts'
---
--- * 'rdMaximums'
---
--- * 'rdDataLastRefreshed'
---
--- * 'rdRowCount'
---
--- * 'rdSamplingSpaceSizes'
---
--- * 'rdIsDataGolden'
-reportData
-    :: ReportData
-reportData =
-  ReportData'
-    { _rdMinimums = Nothing
-    , _rdRows = Nothing
-    , _rdTotals = Nothing
-    , _rdSamplesReadCounts = Nothing
-    , _rdMaximums = Nothing
-    , _rdDataLastRefreshed = Nothing
-    , _rdRowCount = Nothing
-    , _rdSamplingSpaceSizes = Nothing
-    , _rdIsDataGolden = Nothing
-    }
-
-
--- | Minimum and maximum values seen over all matching rows. These are both
--- empty when \`hideValueRanges\` in the request is false, or when rowCount
--- is zero.
-rdMinimums :: Lens' ReportData [DateRangeValues]
-rdMinimums
-  = lens _rdMinimums (\ s a -> s{_rdMinimums = a}) .
-      _Default
-      . _Coerce
-
--- | There\'s one ReportRow for every unique combination of dimensions.
-rdRows :: Lens' ReportData [ReportRow]
-rdRows
-  = lens _rdRows (\ s a -> s{_rdRows = a}) . _Default .
-      _Coerce
-
--- | For each requested date range, for the set of all rows that match the
--- query, every requested value format gets a total. The total for a value
--- format is computed by first totaling the metrics mentioned in the value
--- format and then evaluating the value format as a scalar expression.
--- E.g., The \"totals\" for \`3 \/ (ga:sessions + 2)\` we compute \`3 \/
--- ((sum of all relevant ga:sessions) + 2)\`. Totals are computed before
--- pagination.
-rdTotals :: Lens' ReportData [DateRangeValues]
-rdTotals
-  = lens _rdTotals (\ s a -> s{_rdTotals = a}) .
-      _Default
-      . _Coerce
-
--- | If the results are
--- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),
--- this returns the total number of samples read, one entry per date range.
--- If the results are not sampled this field will not be defined. See
--- [developer
--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for
--- details.
-rdSamplesReadCounts :: Lens' ReportData [Int64]
-rdSamplesReadCounts
-  = lens _rdSamplesReadCounts
-      (\ s a -> s{_rdSamplesReadCounts = a})
-      . _Default
-      . _Coerce
-
--- | Minimum and maximum values seen over all matching rows. These are both
--- empty when \`hideValueRanges\` in the request is false, or when rowCount
--- is zero.
-rdMaximums :: Lens' ReportData [DateRangeValues]
-rdMaximums
-  = lens _rdMaximums (\ s a -> s{_rdMaximums = a}) .
-      _Default
-      . _Coerce
-
--- | The last time the data in the report was refreshed. All the hits
--- received before this timestamp are included in the calculation of the
--- report.
-rdDataLastRefreshed :: Lens' ReportData (Maybe UTCTime)
-rdDataLastRefreshed
-  = lens _rdDataLastRefreshed
-      (\ s a -> s{_rdDataLastRefreshed = a})
-      . mapping _DateTime
-
--- | Total number of matching rows for this query.
-rdRowCount :: Lens' ReportData (Maybe Int32)
-rdRowCount
-  = lens _rdRowCount (\ s a -> s{_rdRowCount = a}) .
-      mapping _Coerce
-
--- | If the results are
--- [sampled](https:\/\/support.google.com\/analytics\/answer\/2637192),
--- this returns the total number of samples present, one entry per date
--- range. If the results are not sampled this field will not be defined.
--- See [developer
--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for
--- details.
-rdSamplingSpaceSizes :: Lens' ReportData [Int64]
-rdSamplingSpaceSizes
-  = lens _rdSamplingSpaceSizes
-      (\ s a -> s{_rdSamplingSpaceSizes = a})
-      . _Default
-      . _Coerce
-
--- | Indicates if response to this request is golden or not. Data is golden
--- when the exact same request will not produce any new results if asked at
--- a later point in time.
-rdIsDataGolden :: Lens' ReportData (Maybe Bool)
-rdIsDataGolden
-  = lens _rdIsDataGolden
-      (\ s a -> s{_rdIsDataGolden = a})
-
-instance FromJSON ReportData where
-        parseJSON
-          = withObject "ReportData"
-              (\ o ->
-                 ReportData' <$>
-                   (o .:? "minimums" .!= mempty) <*>
-                     (o .:? "rows" .!= mempty)
-                     <*> (o .:? "totals" .!= mempty)
-                     <*> (o .:? "samplesReadCounts" .!= mempty)
-                     <*> (o .:? "maximums" .!= mempty)
-                     <*> (o .:? "dataLastRefreshed")
-                     <*> (o .:? "rowCount")
-                     <*> (o .:? "samplingSpaceSizes" .!= mempty)
-                     <*> (o .:? "isDataGolden"))
-
-instance ToJSON ReportData where
-        toJSON ReportData'{..}
-          = object
-              (catMaybes
-                 [("minimums" .=) <$> _rdMinimums,
-                  ("rows" .=) <$> _rdRows, ("totals" .=) <$> _rdTotals,
-                  ("samplesReadCounts" .=) <$> _rdSamplesReadCounts,
-                  ("maximums" .=) <$> _rdMaximums,
-                  ("dataLastRefreshed" .=) <$> _rdDataLastRefreshed,
-                  ("rowCount" .=) <$> _rdRowCount,
-                  ("samplingSpaceSizes" .=) <$> _rdSamplingSpaceSizes,
-                  ("isDataGolden" .=) <$> _rdIsDataGolden])
-
--- | Filter Clause to be used in a segment definition, can be wither a metric
--- or a dimension filter.
---
--- /See:/ 'segmentFilterClause' smart constructor.
-data SegmentFilterClause =
-  SegmentFilterClause'
-    { _sfcMetricFilter    :: !(Maybe SegmentMetricFilter)
-    , _sfcNot             :: !(Maybe Bool)
-    , _sfcDimensionFilter :: !(Maybe SegmentDimensionFilter)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SegmentFilterClause' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfcMetricFilter'
---
--- * 'sfcNot'
---
--- * 'sfcDimensionFilter'
-segmentFilterClause
-    :: SegmentFilterClause
-segmentFilterClause =
-  SegmentFilterClause'
-    { _sfcMetricFilter = Nothing
-    , _sfcNot = Nothing
-    , _sfcDimensionFilter = Nothing
-    }
-
-
--- | Metric Filter for the segment definition.
-sfcMetricFilter :: Lens' SegmentFilterClause (Maybe SegmentMetricFilter)
-sfcMetricFilter
-  = lens _sfcMetricFilter
-      (\ s a -> s{_sfcMetricFilter = a})
-
--- | Matches the complement (\`!\`) of the filter.
-sfcNot :: Lens' SegmentFilterClause (Maybe Bool)
-sfcNot = lens _sfcNot (\ s a -> s{_sfcNot = a})
-
--- | Dimension Filter for the segment definition.
-sfcDimensionFilter :: Lens' SegmentFilterClause (Maybe SegmentDimensionFilter)
-sfcDimensionFilter
-  = lens _sfcDimensionFilter
-      (\ s a -> s{_sfcDimensionFilter = a})
-
-instance FromJSON SegmentFilterClause where
-        parseJSON
-          = withObject "SegmentFilterClause"
-              (\ o ->
-                 SegmentFilterClause' <$>
-                   (o .:? "metricFilter") <*> (o .:? "not") <*>
-                     (o .:? "dimensionFilter"))
-
-instance ToJSON SegmentFilterClause where
-        toJSON SegmentFilterClause'{..}
-          = object
-              (catMaybes
-                 [("metricFilter" .=) <$> _sfcMetricFilter,
-                  ("not" .=) <$> _sfcNot,
-                  ("dimensionFilter" .=) <$> _sfcDimensionFilter])
-
--- | A segment sequence definition.
---
--- /See:/ 'segmentSequenceStep' smart constructor.
-data SegmentSequenceStep =
-  SegmentSequenceStep'
-    { _sssMatchType           :: !(Maybe SegmentSequenceStepMatchType)
-    , _sssOrFiltersForSegment :: !(Maybe [OrFiltersForSegment])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SegmentSequenceStep' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sssMatchType'
---
--- * 'sssOrFiltersForSegment'
-segmentSequenceStep
-    :: SegmentSequenceStep
-segmentSequenceStep =
-  SegmentSequenceStep'
-    {_sssMatchType = Nothing, _sssOrFiltersForSegment = Nothing}
-
-
--- | Specifies if the step immediately precedes or can be any time before the
--- next step.
-sssMatchType :: Lens' SegmentSequenceStep (Maybe SegmentSequenceStepMatchType)
-sssMatchType
-  = lens _sssMatchType (\ s a -> s{_sssMatchType = a})
-
--- | A sequence is specified with a list of Or grouped filters which are
--- combined with \`AND\` operator.
-sssOrFiltersForSegment :: Lens' SegmentSequenceStep [OrFiltersForSegment]
-sssOrFiltersForSegment
-  = lens _sssOrFiltersForSegment
-      (\ s a -> s{_sssOrFiltersForSegment = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON SegmentSequenceStep where
-        parseJSON
-          = withObject "SegmentSequenceStep"
-              (\ o ->
-                 SegmentSequenceStep' <$>
-                   (o .:? "matchType") <*>
-                     (o .:? "orFiltersForSegment" .!= mempty))
-
-instance ToJSON SegmentSequenceStep where
-        toJSON SegmentSequenceStep'{..}
-          = object
-              (catMaybes
-                 [("matchType" .=) <$> _sssMatchType,
-                  ("orFiltersForSegment" .=) <$>
-                    _sssOrFiltersForSegment])
-
--- | A list of segment filters in the \`OR\` group are combined with the
--- logical OR operator.
---
--- /See:/ 'orFiltersForSegment' smart constructor.
-newtype OrFiltersForSegment =
-  OrFiltersForSegment'
-    { _offsSegmentFilterClauses :: Maybe [SegmentFilterClause]
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'OrFiltersForSegment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'offsSegmentFilterClauses'
-orFiltersForSegment
-    :: OrFiltersForSegment
-orFiltersForSegment = OrFiltersForSegment' {_offsSegmentFilterClauses = Nothing}
-
-
--- | List of segment filters to be combined with a \`OR\` operator.
-offsSegmentFilterClauses :: Lens' OrFiltersForSegment [SegmentFilterClause]
-offsSegmentFilterClauses
-  = lens _offsSegmentFilterClauses
-      (\ s a -> s{_offsSegmentFilterClauses = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON OrFiltersForSegment where
-        parseJSON
-          = withObject "OrFiltersForSegment"
-              (\ o ->
-                 OrFiltersForSegment' <$>
-                   (o .:? "segmentFilterClauses" .!= mempty))
-
-instance ToJSON OrFiltersForSegment where
-        toJSON OrFiltersForSegment'{..}
-          = object
-              (catMaybes
-                 [("segmentFilterClauses" .=) <$>
-                    _offsSegmentFilterClauses])
-
--- | SegmentDefinition defines the segment to be a set of SegmentFilters
--- which are combined together with a logical \`AND\` operation.
---
--- /See:/ 'segmentDefinition' smart constructor.
-newtype SegmentDefinition =
-  SegmentDefinition'
-    { _sdSegmentFilters :: Maybe [SegmentFilter]
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SegmentDefinition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdSegmentFilters'
-segmentDefinition
-    :: SegmentDefinition
-segmentDefinition = SegmentDefinition' {_sdSegmentFilters = Nothing}
-
-
--- | A segment is defined by a set of segment filters which are combined
--- together with a logical \`AND\` operation.
-sdSegmentFilters :: Lens' SegmentDefinition [SegmentFilter]
-sdSegmentFilters
-  = lens _sdSegmentFilters
-      (\ s a -> s{_sdSegmentFilters = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON SegmentDefinition where
-        parseJSON
-          = withObject "SegmentDefinition"
-              (\ o ->
-                 SegmentDefinition' <$>
-                   (o .:? "segmentFilters" .!= mempty))
-
-instance ToJSON SegmentDefinition where
-        toJSON SegmentDefinition'{..}
-          = object
-              (catMaybes
-                 [("segmentFilters" .=) <$> _sdSegmentFilters])
-
--- | Contains information to identify a particular user uniquely.
---
--- /See:/ 'user' smart constructor.
-data User =
-  User'
-    { _uUserId :: !(Maybe Text)
-    , _uType   :: !(Maybe UserType)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'User' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uUserId'
---
--- * 'uType'
-user
-    :: User
-user = User' {_uUserId = Nothing, _uType = Nothing}
-
-
--- | Unique Id of the user for which the data is being requested.
-uUserId :: Lens' User (Maybe Text)
-uUserId = lens _uUserId (\ s a -> s{_uUserId = a})
-
--- | Type of the user in the request. The field \`userId\` is associated with
--- this type.
-uType :: Lens' User (Maybe UserType)
-uType = lens _uType (\ s a -> s{_uType = a})
-
-instance FromJSON User where
-        parseJSON
-          = withObject "User"
-              (\ o ->
-                 User' <$> (o .:? "userId") <*> (o .:? "type"))
-
-instance ToJSON User where
-        toJSON User'{..}
-          = object
-              (catMaybes
-                 [("userId" .=) <$> _uUserId, ("type" .=) <$> _uType])
-
--- | The Pivot describes the pivot section in the request. The Pivot helps
--- rearrange the information in the table for certain reports by pivoting
--- your data on a second dimension.
---
--- /See:/ 'pivot' smart constructor.
-data Pivot =
-  Pivot'
-    { _pStartGroup             :: !(Maybe (Textual Int32))
-    , _pMetrics                :: !(Maybe [Metric])
-    , _pMaxGroupCount          :: !(Maybe (Textual Int32))
-    , _pDimensions             :: !(Maybe [Dimension])
-    , _pDimensionFilterClauses :: !(Maybe [DimensionFilterClause])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Pivot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pStartGroup'
---
--- * 'pMetrics'
---
--- * 'pMaxGroupCount'
---
--- * 'pDimensions'
---
--- * 'pDimensionFilterClauses'
-pivot
-    :: Pivot
-pivot =
-  Pivot'
-    { _pStartGroup = Nothing
-    , _pMetrics = Nothing
-    , _pMaxGroupCount = Nothing
-    , _pDimensions = Nothing
-    , _pDimensionFilterClauses = Nothing
-    }
-
-
--- | If k metrics were requested, then the response will contain some
--- data-dependent multiple of k columns in the report. E.g., if you pivoted
--- on the dimension \`ga:browser\` then you\'d get k columns for
--- \"Firefox\", k columns for \"IE\", k columns for \"Chrome\", etc. The
--- ordering of the groups of columns is determined by descending order of
--- \"total\" for the first of the k values. Ties are broken by
--- lexicographic ordering of the first pivot dimension, then lexicographic
--- ordering of the second pivot dimension, and so on. E.g., if the totals
--- for the first value for Firefox, IE, and Chrome were 8, 2, 8,
--- respectively, the order of columns would be Chrome, Firefox, IE. The
--- following let you choose which of the groups of k columns are included
--- in the response.
-pStartGroup :: Lens' Pivot (Maybe Int32)
-pStartGroup
-  = lens _pStartGroup (\ s a -> s{_pStartGroup = a}) .
-      mapping _Coerce
-
--- | The pivot metrics. Pivot metrics are part of the restriction on total
--- number of metrics allowed in the request.
-pMetrics :: Lens' Pivot [Metric]
-pMetrics
-  = lens _pMetrics (\ s a -> s{_pMetrics = a}) .
-      _Default
-      . _Coerce
-
--- | Specifies the maximum number of groups to return. The default value is
--- 10, also the maximum value is 1,000.
-pMaxGroupCount :: Lens' Pivot (Maybe Int32)
-pMaxGroupCount
-  = lens _pMaxGroupCount
-      (\ s a -> s{_pMaxGroupCount = a})
-      . mapping _Coerce
-
--- | A list of dimensions to show as pivot columns. A Pivot can have a
--- maximum of 4 dimensions. Pivot dimensions are part of the restriction on
--- the total number of dimensions allowed in the request.
-pDimensions :: Lens' Pivot [Dimension]
-pDimensions
-  = lens _pDimensions (\ s a -> s{_pDimensions = a}) .
-      _Default
-      . _Coerce
-
--- | DimensionFilterClauses are logically combined with an \`AND\` operator:
--- only data that is included by all these DimensionFilterClauses
--- contributes to the values in this pivot region. Dimension filters can be
--- used to restrict the columns shown in the pivot region. For example if
--- you have \`ga:browser\` as the requested dimension in the pivot region,
--- and you specify key filters to restrict \`ga:browser\` to only \"IE\" or
--- \"Firefox\", then only those two browsers would show up as columns.
-pDimensionFilterClauses :: Lens' Pivot [DimensionFilterClause]
-pDimensionFilterClauses
-  = lens _pDimensionFilterClauses
-      (\ s a -> s{_pDimensionFilterClauses = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON Pivot where
-        parseJSON
-          = withObject "Pivot"
-              (\ o ->
-                 Pivot' <$>
-                   (o .:? "startGroup") <*> (o .:? "metrics" .!= mempty)
-                     <*> (o .:? "maxGroupCount")
-                     <*> (o .:? "dimensions" .!= mempty)
-                     <*> (o .:? "dimensionFilterClauses" .!= mempty))
-
-instance ToJSON Pivot where
-        toJSON Pivot'{..}
-          = object
-              (catMaybes
-                 [("startGroup" .=) <$> _pStartGroup,
-                  ("metrics" .=) <$> _pMetrics,
-                  ("maxGroupCount" .=) <$> _pMaxGroupCount,
-                  ("dimensions" .=) <$> _pDimensions,
-                  ("dimensionFilterClauses" .=) <$>
-                    _pDimensionFilterClauses])
-
--- | Represents details collected when the visitor performs a transaction on
--- the page.
---
--- /See:/ 'transactionData' smart constructor.
-data TransactionData =
-  TransactionData'
-    { _tdTransactionId       :: !(Maybe Text)
-    , _tdTransactionTax      :: !(Maybe (Textual Double))
-    , _tdTransactionShipping :: !(Maybe (Textual Double))
-    , _tdTransactionRevenue  :: !(Maybe (Textual Double))
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TransactionData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tdTransactionId'
---
--- * 'tdTransactionTax'
---
--- * 'tdTransactionShipping'
---
--- * 'tdTransactionRevenue'
-transactionData
-    :: TransactionData
-transactionData =
-  TransactionData'
-    { _tdTransactionId = Nothing
-    , _tdTransactionTax = Nothing
-    , _tdTransactionShipping = Nothing
-    , _tdTransactionRevenue = Nothing
-    }
-
-
--- | The transaction ID, supplied by the e-commerce tracking method, for the
--- purchase in the shopping cart.
-tdTransactionId :: Lens' TransactionData (Maybe Text)
-tdTransactionId
-  = lens _tdTransactionId
-      (\ s a -> s{_tdTransactionId = a})
-
--- | Total tax for the transaction.
-tdTransactionTax :: Lens' TransactionData (Maybe Double)
-tdTransactionTax
-  = lens _tdTransactionTax
-      (\ s a -> s{_tdTransactionTax = a})
-      . mapping _Coerce
-
--- | Total cost of shipping.
-tdTransactionShipping :: Lens' TransactionData (Maybe Double)
-tdTransactionShipping
-  = lens _tdTransactionShipping
-      (\ s a -> s{_tdTransactionShipping = a})
-      . mapping _Coerce
-
--- | The total sale revenue (excluding shipping and tax) of the transaction.
-tdTransactionRevenue :: Lens' TransactionData (Maybe Double)
-tdTransactionRevenue
-  = lens _tdTransactionRevenue
-      (\ s a -> s{_tdTransactionRevenue = a})
-      . mapping _Coerce
-
-instance FromJSON TransactionData where
-        parseJSON
-          = withObject "TransactionData"
-              (\ o ->
-                 TransactionData' <$>
-                   (o .:? "transactionId") <*> (o .:? "transactionTax")
-                     <*> (o .:? "transactionShipping")
-                     <*> (o .:? "transactionRevenue"))
-
-instance ToJSON TransactionData where
-        toJSON TransactionData'{..}
-          = object
-              (catMaybes
-                 [("transactionId" .=) <$> _tdTransactionId,
-                  ("transactionTax" .=) <$> _tdTransactionTax,
-                  ("transactionShipping" .=) <$>
-                    _tdTransactionShipping,
-                  ("transactionRevenue" .=) <$> _tdTransactionRevenue])
-
--- | Sequence conditions consist of one or more steps, where each step is
--- defined by one or more dimension\/metric conditions. Multiple steps can
--- be combined with special sequence operators.
---
--- /See:/ 'sequenceSegment' smart constructor.
-data SequenceSegment =
-  SequenceSegment'
-    { _ssFirstStepShouldMatchFirstHit :: !(Maybe Bool)
-    , _ssSegmentSequenceSteps         :: !(Maybe [SegmentSequenceStep])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SequenceSegment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssFirstStepShouldMatchFirstHit'
---
--- * 'ssSegmentSequenceSteps'
-sequenceSegment
-    :: SequenceSegment
-sequenceSegment =
-  SequenceSegment'
-    { _ssFirstStepShouldMatchFirstHit = Nothing
-    , _ssSegmentSequenceSteps = Nothing
-    }
-
-
--- | If set, first step condition must match the first hit of the visitor (in
--- the date range).
-ssFirstStepShouldMatchFirstHit :: Lens' SequenceSegment (Maybe Bool)
-ssFirstStepShouldMatchFirstHit
-  = lens _ssFirstStepShouldMatchFirstHit
-      (\ s a -> s{_ssFirstStepShouldMatchFirstHit = a})
-
--- | The list of steps in the sequence.
-ssSegmentSequenceSteps :: Lens' SequenceSegment [SegmentSequenceStep]
-ssSegmentSequenceSteps
-  = lens _ssSegmentSequenceSteps
-      (\ s a -> s{_ssSegmentSequenceSteps = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON SequenceSegment where
-        parseJSON
-          = withObject "SequenceSegment"
-              (\ o ->
-                 SequenceSegment' <$>
-                   (o .:? "firstStepShouldMatchFirstHit") <*>
-                     (o .:? "segmentSequenceSteps" .!= mempty))
-
-instance ToJSON SequenceSegment where
-        toJSON SequenceSegment'{..}
-          = object
-              (catMaybes
-                 [("firstStepShouldMatchFirstHit" .=) <$>
-                    _ssFirstStepShouldMatchFirstHit,
-                  ("segmentSequenceSteps" .=) <$>
-                    _ssSegmentSequenceSteps])
-
--- | [Metrics](https:\/\/support.google.com\/analytics\/answer\/1033861) are
--- the quantitative measurements. For example, the metric \`ga:users\`
--- indicates the total number of users for the requested time period.
---
--- /See:/ 'metric' smart constructor.
-data Metric =
-  Metric'
-    { _mFormattingType :: !(Maybe MetricFormattingType)
-    , _mAlias          :: !(Maybe Text)
-    , _mExpression     :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Metric' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mFormattingType'
---
--- * 'mAlias'
---
--- * 'mExpression'
-metric
-    :: Metric
-metric =
-  Metric'
-    {_mFormattingType = Nothing, _mAlias = Nothing, _mExpression = Nothing}
-
-
--- | Specifies how the metric expression should be formatted, for example
--- \`INTEGER\`.
-mFormattingType :: Lens' Metric (Maybe MetricFormattingType)
-mFormattingType
-  = lens _mFormattingType
-      (\ s a -> s{_mFormattingType = a})
-
--- | An alias for the metric expression is an alternate name for the
--- expression. The alias can be used for filtering and sorting. This field
--- is optional and is useful if the expression is not a single metric but a
--- complex expression which cannot be used in filtering and sorting. The
--- alias is also used in the response column header.
-mAlias :: Lens' Metric (Maybe Text)
-mAlias = lens _mAlias (\ s a -> s{_mAlias = a})
-
--- | A metric expression in the request. An expression is constructed from
--- one or more metrics and numbers. Accepted operators include: Plus (+),
--- Minus (-), Negation (Unary -), Divided by (\/), Multiplied by (*),
--- Parenthesis, Positive cardinal numbers (0-9), can include decimals and
--- is limited to 1024 characters. Example \`ga:totalRefunds\/ga:users\`, in
--- most cases the metric expression is just a single metric name like
--- \`ga:users\`. Adding mixed \`MetricType\` (E.g., \`CURRENCY\` +
--- \`PERCENTAGE\`) metrics will result in unexpected results.
-mExpression :: Lens' Metric (Maybe Text)
-mExpression
-  = lens _mExpression (\ s a -> s{_mExpression = a})
-
-instance FromJSON Metric where
-        parseJSON
-          = withObject "Metric"
-              (\ o ->
-                 Metric' <$>
-                   (o .:? "formattingType") <*> (o .:? "alias") <*>
-                     (o .:? "expression"))
-
-instance ToJSON Metric where
-        toJSON Metric'{..}
-          = object
-              (catMaybes
-                 [("formattingType" .=) <$> _mFormattingType,
-                  ("alias" .=) <$> _mAlias,
-                  ("expression" .=) <$> _mExpression])
-
--- | Metric filter to be used in a segment filter clause.
---
--- /See:/ 'segmentMetricFilter' smart constructor.
-data SegmentMetricFilter =
-  SegmentMetricFilter'
-    { _smfOperator           :: !(Maybe SegmentMetricFilterOperator)
-    , _smfMetricName         :: !(Maybe Text)
-    , _smfMaxComparisonValue :: !(Maybe Text)
-    , _smfScope              :: !(Maybe SegmentMetricFilterScope)
-    , _smfComparisonValue    :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SegmentMetricFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'smfOperator'
---
--- * 'smfMetricName'
---
--- * 'smfMaxComparisonValue'
---
--- * 'smfScope'
---
--- * 'smfComparisonValue'
-segmentMetricFilter
-    :: SegmentMetricFilter
-segmentMetricFilter =
-  SegmentMetricFilter'
-    { _smfOperator = Nothing
-    , _smfMetricName = Nothing
-    , _smfMaxComparisonValue = Nothing
-    , _smfScope = Nothing
-    , _smfComparisonValue = Nothing
-    }
-
-
--- | Specifies is the operation to perform to compare the metric. The default
--- is \`EQUAL\`.
-smfOperator :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterOperator)
-smfOperator
-  = lens _smfOperator (\ s a -> s{_smfOperator = a})
-
--- | The metric that will be filtered on. A \`metricFilter\` must contain a
--- metric name.
-smfMetricName :: Lens' SegmentMetricFilter (Maybe Text)
-smfMetricName
-  = lens _smfMetricName
-      (\ s a -> s{_smfMetricName = a})
-
--- | Max comparison value is only used for \`BETWEEN\` operator.
-smfMaxComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)
-smfMaxComparisonValue
-  = lens _smfMaxComparisonValue
-      (\ s a -> s{_smfMaxComparisonValue = a})
-
--- | Scope for a metric defines the level at which that metric is defined.
--- The specified metric scope must be equal to or greater than its primary
--- scope as defined in the data model. The primary scope is defined by if
--- the segment is selecting users or sessions.
-smfScope :: Lens' SegmentMetricFilter (Maybe SegmentMetricFilterScope)
-smfScope = lens _smfScope (\ s a -> s{_smfScope = a})
-
--- | The value to compare against. If the operator is \`BETWEEN\`, this value
--- is treated as minimum comparison value.
-smfComparisonValue :: Lens' SegmentMetricFilter (Maybe Text)
-smfComparisonValue
-  = lens _smfComparisonValue
-      (\ s a -> s{_smfComparisonValue = a})
-
-instance FromJSON SegmentMetricFilter where
-        parseJSON
-          = withObject "SegmentMetricFilter"
-              (\ o ->
-                 SegmentMetricFilter' <$>
-                   (o .:? "operator") <*> (o .:? "metricName") <*>
-                     (o .:? "maxComparisonValue")
-                     <*> (o .:? "scope")
-                     <*> (o .:? "comparisonValue"))
-
-instance ToJSON SegmentMetricFilter where
-        toJSON SegmentMetricFilter'{..}
-          = object
-              (catMaybes
-                 [("operator" .=) <$> _smfOperator,
-                  ("metricName" .=) <$> _smfMetricName,
-                  ("maxComparisonValue" .=) <$> _smfMaxComparisonValue,
-                  ("scope" .=) <$> _smfScope,
-                  ("comparisonValue" .=) <$> _smfComparisonValue])
-
--- | The batch request containing multiple report request.
---
--- /See:/ 'getReportsRequest' smart constructor.
-data GetReportsRequest =
-  GetReportsRequest'
-    { _grrUseResourceQuotas :: !(Maybe Bool)
-    , _grrReportRequests    :: !(Maybe [ReportRequest])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetReportsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grrUseResourceQuotas'
---
--- * 'grrReportRequests'
-getReportsRequest
-    :: GetReportsRequest
-getReportsRequest =
-  GetReportsRequest'
-    {_grrUseResourceQuotas = Nothing, _grrReportRequests = Nothing}
-
-
--- | Enables [resource based
--- quotas](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4),
--- (defaults to \`False\`). If this field is set to \`True\` the per view
--- (profile) quotas are governed by the computational cost of the request.
--- Note that using cost based quotas will higher enable sampling rates. (10
--- Million for \`SMALL\`, 100M for \`LARGE\`. See the [limits and quotas
--- documentation](\/analytics\/devguides\/reporting\/core\/v4\/limits-quotas#analytics_reporting_api_v4)
--- for details.
-grrUseResourceQuotas :: Lens' GetReportsRequest (Maybe Bool)
-grrUseResourceQuotas
-  = lens _grrUseResourceQuotas
-      (\ s a -> s{_grrUseResourceQuotas = a})
-
--- | Requests, each request will have a separate response. There can be a
--- maximum of 5 requests. All requests should have the same \`dateRanges\`,
--- \`viewId\`, \`segments\`, \`samplingLevel\`, and \`cohortGroup\`.
-grrReportRequests :: Lens' GetReportsRequest [ReportRequest]
-grrReportRequests
-  = lens _grrReportRequests
-      (\ s a -> s{_grrReportRequests = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON GetReportsRequest where
-        parseJSON
-          = withObject "GetReportsRequest"
-              (\ o ->
-                 GetReportsRequest' <$>
-                   (o .:? "useResourceQuotas") <*>
-                     (o .:? "reportRequests" .!= mempty))
-
-instance ToJSON GetReportsRequest where
-        toJSON GetReportsRequest'{..}
-          = object
-              (catMaybes
-                 [("useResourceQuotas" .=) <$> _grrUseResourceQuotas,
-                  ("reportRequests" .=) <$> _grrReportRequests])
-
--- | This represents a user session performed on a specific device at a
--- certain time over a period of time.
---
--- /See:/ 'userActivitySession' smart constructor.
-data UserActivitySession =
-  UserActivitySession'
-    { _uasPlatform       :: !(Maybe Text)
-    , _uasDeviceCategory :: !(Maybe Text)
-    , _uasActivities     :: !(Maybe [Activity])
-    , _uasSessionDate    :: !(Maybe Text)
-    , _uasDataSource     :: !(Maybe Text)
-    , _uasSessionId      :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UserActivitySession' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uasPlatform'
---
--- * 'uasDeviceCategory'
---
--- * 'uasActivities'
---
--- * 'uasSessionDate'
---
--- * 'uasDataSource'
---
--- * 'uasSessionId'
-userActivitySession
-    :: UserActivitySession
-userActivitySession =
-  UserActivitySession'
-    { _uasPlatform = Nothing
-    , _uasDeviceCategory = Nothing
-    , _uasActivities = Nothing
-    , _uasSessionDate = Nothing
-    , _uasDataSource = Nothing
-    , _uasSessionId = Nothing
-    }
-
-
--- | Platform on which the activity happened: \"android\", \"ios\" etc.
-uasPlatform :: Lens' UserActivitySession (Maybe Text)
-uasPlatform
-  = lens _uasPlatform (\ s a -> s{_uasPlatform = a})
-
--- | The type of device used: \"mobile\", \"tablet\" etc.
-uasDeviceCategory :: Lens' UserActivitySession (Maybe Text)
-uasDeviceCategory
-  = lens _uasDeviceCategory
-      (\ s a -> s{_uasDeviceCategory = a})
-
--- | Represents a detailed view into each of the activity in this session.
-uasActivities :: Lens' UserActivitySession [Activity]
-uasActivities
-  = lens _uasActivities
-      (\ s a -> s{_uasActivities = a})
-      . _Default
-      . _Coerce
-
--- | Date of this session in ISO-8601 format.
-uasSessionDate :: Lens' UserActivitySession (Maybe Text)
-uasSessionDate
-  = lens _uasSessionDate
-      (\ s a -> s{_uasSessionDate = a})
-
--- | The data source of a hit. By default, hits sent from analytics.js are
--- reported as \"web\" and hits sent from the mobile SDKs are reported as
--- \"app\". These values can be overridden in the Measurement Protocol.
-uasDataSource :: Lens' UserActivitySession (Maybe Text)
-uasDataSource
-  = lens _uasDataSource
-      (\ s a -> s{_uasDataSource = a})
-
--- | Unique ID of the session.
-uasSessionId :: Lens' UserActivitySession (Maybe Text)
-uasSessionId
-  = lens _uasSessionId (\ s a -> s{_uasSessionId = a})
-
-instance FromJSON UserActivitySession where
-        parseJSON
-          = withObject "UserActivitySession"
-              (\ o ->
-                 UserActivitySession' <$>
-                   (o .:? "platform") <*> (o .:? "deviceCategory") <*>
-                     (o .:? "activities" .!= mempty)
-                     <*> (o .:? "sessionDate")
-                     <*> (o .:? "dataSource")
-                     <*> (o .:? "sessionId"))
-
-instance ToJSON UserActivitySession where
-        toJSON UserActivitySession'{..}
-          = object
-              (catMaybes
-                 [("platform" .=) <$> _uasPlatform,
-                  ("deviceCategory" .=) <$> _uasDeviceCategory,
-                  ("activities" .=) <$> _uasActivities,
-                  ("sessionDate" .=) <$> _uasSessionDate,
-                  ("dataSource" .=) <$> _uasDataSource,
-                  ("sessionId" .=) <$> _uasSessionId])
-
--- | Represents all the details pertaining to a goal.
---
--- /See:/ 'goalData' smart constructor.
-data GoalData =
-  GoalData'
-    { _gdGoalPreviousStep2      :: !(Maybe Text)
-    , _gdGoalName               :: !(Maybe Text)
-    , _gdGoalPreviousStep3      :: !(Maybe Text)
-    , _gdGoalIndex              :: !(Maybe (Textual Int32))
-    , _gdGoalCompletionLocation :: !(Maybe Text)
-    , _gdGoalPreviousStep1      :: !(Maybe Text)
-    , _gdGoalCompletions        :: !(Maybe (Textual Int64))
-    , _gdGoalValue              :: !(Maybe (Textual Double))
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GoalData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdGoalPreviousStep2'
---
--- * 'gdGoalName'
---
--- * 'gdGoalPreviousStep3'
---
--- * 'gdGoalIndex'
---
--- * 'gdGoalCompletionLocation'
---
--- * 'gdGoalPreviousStep1'
---
--- * 'gdGoalCompletions'
---
--- * 'gdGoalValue'
-goalData
-    :: GoalData
-goalData =
-  GoalData'
-    { _gdGoalPreviousStep2 = Nothing
-    , _gdGoalName = Nothing
-    , _gdGoalPreviousStep3 = Nothing
-    , _gdGoalIndex = Nothing
-    , _gdGoalCompletionLocation = Nothing
-    , _gdGoalPreviousStep1 = Nothing
-    , _gdGoalCompletions = Nothing
-    , _gdGoalValue = Nothing
-    }
-
-
--- | URL of the page two steps prior to the goal completion.
-gdGoalPreviousStep2 :: Lens' GoalData (Maybe Text)
-gdGoalPreviousStep2
-  = lens _gdGoalPreviousStep2
-      (\ s a -> s{_gdGoalPreviousStep2 = a})
-
--- | Name of the goal.
-gdGoalName :: Lens' GoalData (Maybe Text)
-gdGoalName
-  = lens _gdGoalName (\ s a -> s{_gdGoalName = a})
-
--- | URL of the page three steps prior to the goal completion.
-gdGoalPreviousStep3 :: Lens' GoalData (Maybe Text)
-gdGoalPreviousStep3
-  = lens _gdGoalPreviousStep3
-      (\ s a -> s{_gdGoalPreviousStep3 = a})
-
--- | This identifies the goal as configured for the profile.
-gdGoalIndex :: Lens' GoalData (Maybe Int32)
-gdGoalIndex
-  = lens _gdGoalIndex (\ s a -> s{_gdGoalIndex = a}) .
-      mapping _Coerce
-
--- | URL of the page where this goal was completed.
-gdGoalCompletionLocation :: Lens' GoalData (Maybe Text)
-gdGoalCompletionLocation
-  = lens _gdGoalCompletionLocation
-      (\ s a -> s{_gdGoalCompletionLocation = a})
-
--- | URL of the page one step prior to the goal completion.
-gdGoalPreviousStep1 :: Lens' GoalData (Maybe Text)
-gdGoalPreviousStep1
-  = lens _gdGoalPreviousStep1
-      (\ s a -> s{_gdGoalPreviousStep1 = a})
-
--- | Total number of goal completions in this activity.
-gdGoalCompletions :: Lens' GoalData (Maybe Int64)
-gdGoalCompletions
-  = lens _gdGoalCompletions
-      (\ s a -> s{_gdGoalCompletions = a})
-      . mapping _Coerce
-
--- | Value in this goal.
-gdGoalValue :: Lens' GoalData (Maybe Double)
-gdGoalValue
-  = lens _gdGoalValue (\ s a -> s{_gdGoalValue = a}) .
-      mapping _Coerce
-
-instance FromJSON GoalData where
-        parseJSON
-          = withObject "GoalData"
-              (\ o ->
-                 GoalData' <$>
-                   (o .:? "goalPreviousStep2") <*> (o .:? "goalName")
-                     <*> (o .:? "goalPreviousStep3")
-                     <*> (o .:? "goalIndex")
-                     <*> (o .:? "goalCompletionLocation")
-                     <*> (o .:? "goalPreviousStep1")
-                     <*> (o .:? "goalCompletions")
-                     <*> (o .:? "goalValue"))
-
-instance ToJSON GoalData where
-        toJSON GoalData'{..}
-          = object
-              (catMaybes
-                 [("goalPreviousStep2" .=) <$> _gdGoalPreviousStep2,
-                  ("goalName" .=) <$> _gdGoalName,
-                  ("goalPreviousStep3" .=) <$> _gdGoalPreviousStep3,
-                  ("goalIndex" .=) <$> _gdGoalIndex,
-                  ("goalCompletionLocation" .=) <$>
-                    _gdGoalCompletionLocation,
-                  ("goalPreviousStep1" .=) <$> _gdGoalPreviousStep1,
-                  ("goalCompletions" .=) <$> _gdGoalCompletions,
-                  ("goalValue" .=) <$> _gdGoalValue])
-
--- | An Activity represents data for an activity of a user. Note that an
--- Activity is different from a hit. A hit might result in multiple
--- Activity\'s. For example, if a hit includes a transaction and a goal
--- completion, there will be two Activity protos for this hit, one for
--- ECOMMERCE and one for GOAL. Conversely, multiple hits can also construct
--- one Activity. In classic e-commerce, data for one transaction might be
--- sent through multiple hits. These hits will be merged into one ECOMMERCE
--- Activity.
---
--- /See:/ 'activity' smart constructor.
-data Activity =
-  Activity'
-    { _aEvent           :: !(Maybe EventData)
-    , _aHostname        :: !(Maybe Text)
-    , _aActivityType    :: !(Maybe ActivityActivityType)
-    , _aMedium          :: !(Maybe Text)
-    , _aPageview        :: !(Maybe PageviewData)
-    , _aCampaign        :: !(Maybe Text)
-    , _aGoals           :: !(Maybe GoalSetData)
-    , _aChannelGrouping :: !(Maybe Text)
-    , _aAppview         :: !(Maybe ScreenviewData)
-    , _aSource          :: !(Maybe Text)
-    , _aActivityTime    :: !(Maybe DateTime')
-    , _aEcommerce       :: !(Maybe EcommerceData)
-    , _aCustomDimension :: !(Maybe [CustomDimension])
-    , _aKeyword         :: !(Maybe Text)
-    , _aLandingPagePath :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Activity' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aEvent'
---
--- * 'aHostname'
---
--- * 'aActivityType'
---
--- * 'aMedium'
---
--- * 'aPageview'
---
--- * 'aCampaign'
---
--- * 'aGoals'
---
--- * 'aChannelGrouping'
---
--- * 'aAppview'
---
--- * 'aSource'
---
--- * 'aActivityTime'
---
--- * 'aEcommerce'
---
--- * 'aCustomDimension'
---
--- * 'aKeyword'
---
--- * 'aLandingPagePath'
-activity
-    :: Activity
-activity =
-  Activity'
-    { _aEvent = Nothing
-    , _aHostname = Nothing
-    , _aActivityType = Nothing
-    , _aMedium = Nothing
-    , _aPageview = Nothing
-    , _aCampaign = Nothing
-    , _aGoals = Nothing
-    , _aChannelGrouping = Nothing
-    , _aAppview = Nothing
-    , _aSource = Nothing
-    , _aActivityTime = Nothing
-    , _aEcommerce = Nothing
-    , _aCustomDimension = Nothing
-    , _aKeyword = Nothing
-    , _aLandingPagePath = Nothing
-    }
-
-
--- | This field contains all the details pertaining to an event and will be
--- set if \`activity_type\` equals \`EVENT\`.
-aEvent :: Lens' Activity (Maybe EventData)
-aEvent = lens _aEvent (\ s a -> s{_aEvent = a})
-
--- | The hostname from which the tracking request was made.
-aHostname :: Lens' Activity (Maybe Text)
-aHostname
-  = lens _aHostname (\ s a -> s{_aHostname = a})
-
--- | Type of this activity.
-aActivityType :: Lens' Activity (Maybe ActivityActivityType)
-aActivityType
-  = lens _aActivityType
-      (\ s a -> s{_aActivityType = a})
-
--- | The type of referrals. For manual campaign tracking, it is the value of
--- the utm_medium campaign tracking parameter. For AdWords autotagging, it
--- is cpc. If users came from a search engine detected by Google Analytics,
--- it is organic. If the referrer is not a search engine, it is referral.
--- If users came directly to the property and document.referrer is empty,
--- its value is (none).
-aMedium :: Lens' Activity (Maybe Text)
-aMedium = lens _aMedium (\ s a -> s{_aMedium = a})
-
--- | This will be set if \`activity_type\` equals \`PAGEVIEW\`. This field
--- contains all the details about the visitor and the page that was
--- visited.
-aPageview :: Lens' Activity (Maybe PageviewData)
-aPageview
-  = lens _aPageview (\ s a -> s{_aPageview = a})
-
--- | For manual campaign tracking, it is the value of the utm_campaign
--- campaign tracking parameter. For AdWords autotagging, it is the name(s)
--- of the online ad campaign(s) you use for the property. If you use
--- neither, its value is (not set).
-aCampaign :: Lens' Activity (Maybe Text)
-aCampaign
-  = lens _aCampaign (\ s a -> s{_aCampaign = a})
-
--- | This field contains a list of all the goals that were reached in this
--- activity when \`activity_type\` equals \`GOAL\`.
-aGoals :: Lens' Activity (Maybe GoalSetData)
-aGoals = lens _aGoals (\ s a -> s{_aGoals = a})
-
--- | The Channel Group associated with an end user\'s session for this View
--- (defined by the View\'s Channel Groupings).
-aChannelGrouping :: Lens' Activity (Maybe Text)
-aChannelGrouping
-  = lens _aChannelGrouping
-      (\ s a -> s{_aChannelGrouping = a})
-
--- | This will be set if \`activity_type\` equals \`SCREEN_VIEW\`.
-aAppview :: Lens' Activity (Maybe ScreenviewData)
-aAppview = lens _aAppview (\ s a -> s{_aAppview = a})
-
--- | The source of referrals. For manual campaign tracking, it is the value
--- of the utm_source campaign tracking parameter. For AdWords autotagging,
--- it is google. If you use neither, it is the domain of the source (e.g.,
--- document.referrer) referring the users. It may also contain a port
--- address. If users arrived without a referrer, its value is (direct).
-aSource :: Lens' Activity (Maybe Text)
-aSource = lens _aSource (\ s a -> s{_aSource = a})
-
--- | Timestamp of the activity.
-aActivityTime :: Lens' Activity (Maybe UTCTime)
-aActivityTime
-  = lens _aActivityTime
-      (\ s a -> s{_aActivityTime = a})
-      . mapping _DateTime
-
--- | This will be set if \`activity_type\` equals \`ECOMMERCE\`.
-aEcommerce :: Lens' Activity (Maybe EcommerceData)
-aEcommerce
-  = lens _aEcommerce (\ s a -> s{_aEcommerce = a})
-
--- | A list of all custom dimensions associated with this activity.
-aCustomDimension :: Lens' Activity [CustomDimension]
-aCustomDimension
-  = lens _aCustomDimension
-      (\ s a -> s{_aCustomDimension = a})
-      . _Default
-      . _Coerce
-
--- | For manual campaign tracking, it is the value of the utm_term campaign
--- tracking parameter. For AdWords traffic, it contains the best matching
--- targeting criteria. For the display network, where multiple targeting
--- criteria could have caused the ad to show up, it returns the best
--- matching targeting criteria as selected by Ads. This could be
--- display_keyword, site placement, boomuserlist, user_interest, age, or
--- gender. Otherwise its value is (not set).
-aKeyword :: Lens' Activity (Maybe Text)
-aKeyword = lens _aKeyword (\ s a -> s{_aKeyword = a})
-
--- | The first page in users\' sessions, or the landing page.
-aLandingPagePath :: Lens' Activity (Maybe Text)
-aLandingPagePath
-  = lens _aLandingPagePath
-      (\ s a -> s{_aLandingPagePath = a})
-
-instance FromJSON Activity where
-        parseJSON
-          = withObject "Activity"
-              (\ o ->
-                 Activity' <$>
-                   (o .:? "event") <*> (o .:? "hostname") <*>
-                     (o .:? "activityType")
-                     <*> (o .:? "medium")
-                     <*> (o .:? "pageview")
-                     <*> (o .:? "campaign")
-                     <*> (o .:? "goals")
-                     <*> (o .:? "channelGrouping")
-                     <*> (o .:? "appview")
-                     <*> (o .:? "source")
-                     <*> (o .:? "activityTime")
-                     <*> (o .:? "ecommerce")
-                     <*> (o .:? "customDimension" .!= mempty)
-                     <*> (o .:? "keyword")
-                     <*> (o .:? "landingPagePath"))
-
-instance ToJSON Activity where
-        toJSON Activity'{..}
-          = object
-              (catMaybes
-                 [("event" .=) <$> _aEvent,
-                  ("hostname" .=) <$> _aHostname,
-                  ("activityType" .=) <$> _aActivityType,
-                  ("medium" .=) <$> _aMedium,
-                  ("pageview" .=) <$> _aPageview,
-                  ("campaign" .=) <$> _aCampaign,
-                  ("goals" .=) <$> _aGoals,
-                  ("channelGrouping" .=) <$> _aChannelGrouping,
-                  ("appview" .=) <$> _aAppview,
-                  ("source" .=) <$> _aSource,
-                  ("activityTime" .=) <$> _aActivityTime,
-                  ("ecommerce" .=) <$> _aEcommerce,
-                  ("customDimension" .=) <$> _aCustomDimension,
-                  ("keyword" .=) <$> _aKeyword,
-                  ("landingPagePath" .=) <$> _aLandingPagePath])
-
--- | Defines a cohort. A cohort is a group of users who share a common
--- characteristic. For example, all users with the same acquisition date
--- belong to the same cohort.
---
--- /See:/ 'cohort' smart constructor.
-data Cohort =
-  Cohort'
-    { _cDateRange :: !(Maybe DateRange)
-    , _cName      :: !(Maybe Text)
-    , _cType      :: !(Maybe CohortType)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Cohort' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cDateRange'
---
--- * 'cName'
---
--- * 'cType'
-cohort
-    :: Cohort
-cohort = Cohort' {_cDateRange = Nothing, _cName = Nothing, _cType = Nothing}
-
-
--- | This is used for \`FIRST_VISIT_DATE\` cohort, the cohort selects users
--- whose first visit date is between start date and end date defined in the
--- DateRange. The date ranges should be aligned for cohort requests. If the
--- request contains \`ga:cohortNthDay\` it should be exactly one day long,
--- if \`ga:cohortNthWeek\` it should be aligned to the week boundary
--- (starting at Sunday and ending Saturday), and for \`ga:cohortNthMonth\`
--- the date range should be aligned to the month (starting at the first and
--- ending on the last day of the month). For LTV requests there are no such
--- restrictions. You do not need to supply a date range for the
--- \`reportsRequest.dateRanges\` field.
-cDateRange :: Lens' Cohort (Maybe DateRange)
-cDateRange
-  = lens _cDateRange (\ s a -> s{_cDateRange = a})
-
--- | A unique name for the cohort. If not defined name will be auto-generated
--- with values cohort_[1234...].
-cName :: Lens' Cohort (Maybe Text)
-cName = lens _cName (\ s a -> s{_cName = a})
-
--- | Type of the cohort. The only supported type as of now is
--- \`FIRST_VISIT_DATE\`. If this field is unspecified the cohort is treated
--- as \`FIRST_VISIT_DATE\` type cohort.
-cType :: Lens' Cohort (Maybe CohortType)
-cType = lens _cType (\ s a -> s{_cType = a})
-
-instance FromJSON Cohort where
-        parseJSON
-          = withObject "Cohort"
-              (\ o ->
-                 Cohort' <$>
-                   (o .:? "dateRange") <*> (o .:? "name") <*>
-                     (o .:? "type"))
-
-instance ToJSON Cohort where
-        toJSON Cohort'{..}
-          = object
-              (catMaybes
-                 [("dateRange" .=) <$> _cDateRange,
-                  ("name" .=) <$> _cName, ("type" .=) <$> _cType])
-
--- | E-commerce details associated with the user activity.
---
--- /See:/ 'ecommerceData' smart constructor.
-data EcommerceData =
-  EcommerceData'
-    { _edEcommerceType :: !(Maybe EcommerceDataEcommerceType)
-    , _edTransaction   :: !(Maybe TransactionData)
-    , _edProducts      :: !(Maybe [ProductData])
-    , _edActionType    :: !(Maybe EcommerceDataActionType)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'EcommerceData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'edEcommerceType'
---
--- * 'edTransaction'
---
--- * 'edProducts'
---
--- * 'edActionType'
-ecommerceData
-    :: EcommerceData
-ecommerceData =
-  EcommerceData'
-    { _edEcommerceType = Nothing
-    , _edTransaction = Nothing
-    , _edProducts = Nothing
-    , _edActionType = Nothing
-    }
-
-
--- | The type of this e-commerce activity.
-edEcommerceType :: Lens' EcommerceData (Maybe EcommerceDataEcommerceType)
-edEcommerceType
-  = lens _edEcommerceType
-      (\ s a -> s{_edEcommerceType = a})
-
--- | Transaction details of this e-commerce action.
-edTransaction :: Lens' EcommerceData (Maybe TransactionData)
-edTransaction
-  = lens _edTransaction
-      (\ s a -> s{_edTransaction = a})
-
--- | Details of the products in this transaction.
-edProducts :: Lens' EcommerceData [ProductData]
-edProducts
-  = lens _edProducts (\ s a -> s{_edProducts = a}) .
-      _Default
-      . _Coerce
-
--- | Action associated with this e-commerce action.
-edActionType :: Lens' EcommerceData (Maybe EcommerceDataActionType)
-edActionType
-  = lens _edActionType (\ s a -> s{_edActionType = a})
-
-instance FromJSON EcommerceData where
-        parseJSON
-          = withObject "EcommerceData"
-              (\ o ->
-                 EcommerceData' <$>
-                   (o .:? "ecommerceType") <*> (o .:? "transaction") <*>
-                     (o .:? "products" .!= mempty)
-                     <*> (o .:? "actionType"))
-
-instance ToJSON EcommerceData where
-        toJSON EcommerceData'{..}
-          = object
-              (catMaybes
-                 [("ecommerceType" .=) <$> _edEcommerceType,
-                  ("transaction" .=) <$> _edTransaction,
-                  ("products" .=) <$> _edProducts,
-                  ("actionType" .=) <$> _edActionType])
-
--- | Dimension filter specifies the filtering options on a dimension.
---
--- /See:/ 'dimensionFilter' smart constructor.
-data DimensionFilter =
-  DimensionFilter'
-    { _dfNot           :: !(Maybe Bool)
-    , _dfOperator      :: !(Maybe DimensionFilterOperator)
-    , _dfExpressions   :: !(Maybe [Text])
-    , _dfDimensionName :: !(Maybe Text)
-    , _dfCaseSensitive :: !(Maybe Bool)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DimensionFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfNot'
---
--- * 'dfOperator'
---
--- * 'dfExpressions'
---
--- * 'dfDimensionName'
---
--- * 'dfCaseSensitive'
-dimensionFilter
-    :: DimensionFilter
-dimensionFilter =
-  DimensionFilter'
-    { _dfNot = Nothing
-    , _dfOperator = Nothing
-    , _dfExpressions = Nothing
-    , _dfDimensionName = Nothing
-    , _dfCaseSensitive = Nothing
-    }
-
-
--- | Logical \`NOT\` operator. If this boolean is set to true, then the
--- matching dimension values will be excluded in the report. The default is
--- false.
-dfNot :: Lens' DimensionFilter (Maybe Bool)
-dfNot = lens _dfNot (\ s a -> s{_dfNot = a})
-
--- | How to match the dimension to the expression. The default is REGEXP.
-dfOperator :: Lens' DimensionFilter (Maybe DimensionFilterOperator)
-dfOperator
-  = lens _dfOperator (\ s a -> s{_dfOperator = a})
-
--- | Strings or regular expression to match against. Only the first value of
--- the list is used for comparison unless the operator is \`IN_LIST\`. If
--- \`IN_LIST\` operator, then the entire list is used to filter the
--- dimensions as explained in the description of the \`IN_LIST\` operator.
-dfExpressions :: Lens' DimensionFilter [Text]
-dfExpressions
-  = lens _dfExpressions
-      (\ s a -> s{_dfExpressions = a})
-      . _Default
-      . _Coerce
-
--- | The dimension to filter on. A DimensionFilter must contain a dimension.
-dfDimensionName :: Lens' DimensionFilter (Maybe Text)
-dfDimensionName
-  = lens _dfDimensionName
-      (\ s a -> s{_dfDimensionName = a})
-
--- | Should the match be case sensitive? Default is false.
-dfCaseSensitive :: Lens' DimensionFilter (Maybe Bool)
-dfCaseSensitive
-  = lens _dfCaseSensitive
-      (\ s a -> s{_dfCaseSensitive = a})
-
-instance FromJSON DimensionFilter where
-        parseJSON
-          = withObject "DimensionFilter"
-              (\ o ->
-                 DimensionFilter' <$>
-                   (o .:? "not") <*> (o .:? "operator") <*>
-                     (o .:? "expressions" .!= mempty)
-                     <*> (o .:? "dimensionName")
-                     <*> (o .:? "caseSensitive"))
-
-instance ToJSON DimensionFilter where
-        toJSON DimensionFilter'{..}
-          = object
-              (catMaybes
-                 [("not" .=) <$> _dfNot,
-                  ("operator" .=) <$> _dfOperator,
-                  ("expressions" .=) <$> _dfExpressions,
-                  ("dimensionName" .=) <$> _dfDimensionName,
-                  ("caseSensitive" .=) <$> _dfCaseSensitive])
-
--- | The main response class which holds the reports from the Reporting API
--- \`batchGet\` call.
---
--- /See:/ 'getReportsResponse' smart constructor.
-data GetReportsResponse =
-  GetReportsResponse'
-    { _grrReports                 :: !(Maybe [Report])
-    , _grrResourceQuotasRemaining :: !(Maybe ResourceQuotasRemaining)
-    , _grrQueryCost               :: !(Maybe (Textual Int32))
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetReportsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grrReports'
---
--- * 'grrResourceQuotasRemaining'
---
--- * 'grrQueryCost'
-getReportsResponse
-    :: GetReportsResponse
-getReportsResponse =
-  GetReportsResponse'
-    { _grrReports = Nothing
-    , _grrResourceQuotasRemaining = Nothing
-    , _grrQueryCost = Nothing
-    }
-
-
--- | Responses corresponding to each of the request.
-grrReports :: Lens' GetReportsResponse [Report]
-grrReports
-  = lens _grrReports (\ s a -> s{_grrReports = a}) .
-      _Default
-      . _Coerce
-
--- | The amount of resource quota remaining for the property.
-grrResourceQuotasRemaining :: Lens' GetReportsResponse (Maybe ResourceQuotasRemaining)
-grrResourceQuotasRemaining
-  = lens _grrResourceQuotasRemaining
-      (\ s a -> s{_grrResourceQuotasRemaining = a})
-
--- | The amount of resource quota tokens deducted to execute the query.
--- Includes all responses.
-grrQueryCost :: Lens' GetReportsResponse (Maybe Int32)
-grrQueryCost
-  = lens _grrQueryCost (\ s a -> s{_grrQueryCost = a})
-      . mapping _Coerce
-
-instance FromJSON GetReportsResponse where
-        parseJSON
-          = withObject "GetReportsResponse"
-              (\ o ->
-                 GetReportsResponse' <$>
-                   (o .:? "reports" .!= mempty) <*>
-                     (o .:? "resourceQuotasRemaining")
-                     <*> (o .:? "queryCost"))
-
-instance ToJSON GetReportsResponse where
-        toJSON GetReportsResponse'{..}
-          = object
-              (catMaybes
-                 [("reports" .=) <$> _grrReports,
-                  ("resourceQuotasRemaining" .=) <$>
-                    _grrResourceQuotasRemaining,
-                  ("queryCost" .=) <$> _grrQueryCost])
-
--- | Custom dimension.
---
--- /See:/ 'customDimension' smart constructor.
-data CustomDimension =
-  CustomDimension'
-    { _cdValue :: !(Maybe Text)
-    , _cdIndex :: !(Maybe (Textual Int32))
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CustomDimension' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdValue'
---
--- * 'cdIndex'
-customDimension
-    :: CustomDimension
-customDimension = CustomDimension' {_cdValue = Nothing, _cdIndex = Nothing}
-
-
--- | Value of the custom dimension. Default value (i.e. empty string)
--- indicates clearing sesion\/visitor scope custom dimension value.
-cdValue :: Lens' CustomDimension (Maybe Text)
-cdValue = lens _cdValue (\ s a -> s{_cdValue = a})
-
--- | Slot number of custom dimension.
-cdIndex :: Lens' CustomDimension (Maybe Int32)
-cdIndex
-  = lens _cdIndex (\ s a -> s{_cdIndex = a}) .
-      mapping _Coerce
-
-instance FromJSON CustomDimension where
-        parseJSON
-          = withObject "CustomDimension"
-              (\ o ->
-                 CustomDimension' <$>
-                   (o .:? "value") <*> (o .:? "index"))
-
-instance ToJSON CustomDimension where
-        toJSON CustomDimension'{..}
-          = object
-              (catMaybes
-                 [("value" .=) <$> _cdValue,
-                  ("index" .=) <$> _cdIndex])
-
--- | The segment definition, if the report needs to be segmented. A Segment
--- is a subset of the Analytics data. For example, of the entire set of
--- users, one Segment might be users from a particular country or city.
---
--- /See:/ 'segment' smart constructor.
-data Segment =
-  Segment'
-    { _sDynamicSegment :: !(Maybe DynamicSegment)
-    , _sSegmentId      :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Segment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sDynamicSegment'
---
--- * 'sSegmentId'
-segment
-    :: Segment
-segment = Segment' {_sDynamicSegment = Nothing, _sSegmentId = Nothing}
-
-
--- | A dynamic segment definition in the request.
-sDynamicSegment :: Lens' Segment (Maybe DynamicSegment)
-sDynamicSegment
-  = lens _sDynamicSegment
-      (\ s a -> s{_sDynamicSegment = a})
-
--- | The segment ID of a built-in or custom segment, for example
--- \`gaid::-3\`.
-sSegmentId :: Lens' Segment (Maybe Text)
-sSegmentId
-  = lens _sSegmentId (\ s a -> s{_sSegmentId = a})
-
-instance FromJSON Segment where
-        parseJSON
-          = withObject "Segment"
-              (\ o ->
-                 Segment' <$>
-                   (o .:? "dynamicSegment") <*> (o .:? "segmentId"))
-
-instance ToJSON Segment where
-        toJSON Segment'{..}
-          = object
-              (catMaybes
-                 [("dynamicSegment" .=) <$> _sDynamicSegment,
-                  ("segmentId" .=) <$> _sSegmentId])
-
--- | Details of the products in an e-commerce transaction.
---
--- /See:/ 'productData' smart constructor.
-data ProductData =
-  ProductData'
-    { _pdProductName     :: !(Maybe Text)
-    , _pdProductSKU      :: !(Maybe Text)
-    , _pdItemRevenue     :: !(Maybe (Textual Double))
-    , _pdProductQuantity :: !(Maybe (Textual Int64))
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ProductData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdProductName'
---
--- * 'pdProductSKU'
---
--- * 'pdItemRevenue'
---
--- * 'pdProductQuantity'
-productData
-    :: ProductData
-productData =
-  ProductData'
-    { _pdProductName = Nothing
-    , _pdProductSKU = Nothing
-    , _pdItemRevenue = Nothing
-    , _pdProductQuantity = Nothing
-    }
-
-
--- | The product name, supplied by the e-commerce tracking application, for
--- the purchased items.
-pdProductName :: Lens' ProductData (Maybe Text)
-pdProductName
-  = lens _pdProductName
-      (\ s a -> s{_pdProductName = a})
-
--- | Unique code that represents the product.
-pdProductSKU :: Lens' ProductData (Maybe Text)
-pdProductSKU
-  = lens _pdProductSKU (\ s a -> s{_pdProductSKU = a})
-
--- | The total revenue from purchased product items.
-pdItemRevenue :: Lens' ProductData (Maybe Double)
-pdItemRevenue
-  = lens _pdItemRevenue
-      (\ s a -> s{_pdItemRevenue = a})
-      . mapping _Coerce
-
--- | Total number of this product units in the transaction.
-pdProductQuantity :: Lens' ProductData (Maybe Int64)
-pdProductQuantity
-  = lens _pdProductQuantity
-      (\ s a -> s{_pdProductQuantity = a})
-      . mapping _Coerce
-
-instance FromJSON ProductData where
-        parseJSON
-          = withObject "ProductData"
-              (\ o ->
-                 ProductData' <$>
-                   (o .:? "productName") <*> (o .:? "productSku") <*>
-                     (o .:? "itemRevenue")
-                     <*> (o .:? "productQuantity"))
-
-instance ToJSON ProductData where
-        toJSON ProductData'{..}
-          = object
-              (catMaybes
-                 [("productName" .=) <$> _pdProductName,
-                  ("productSku" .=) <$> _pdProductSKU,
-                  ("itemRevenue" .=) <$> _pdItemRevenue,
-                  ("productQuantity" .=) <$> _pdProductQuantity])
-
--- | The resource quota tokens remaining for the property after the request
--- is completed.
---
--- /See:/ 'resourceQuotasRemaining' smart constructor.
-data ResourceQuotasRemaining =
-  ResourceQuotasRemaining'
-    { _rqrHourlyQuotaTokensRemaining :: !(Maybe (Textual Int32))
-    , _rqrDailyQuotaTokensRemaining  :: !(Maybe (Textual Int32))
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResourceQuotasRemaining' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rqrHourlyQuotaTokensRemaining'
---
--- * 'rqrDailyQuotaTokensRemaining'
-resourceQuotasRemaining
-    :: ResourceQuotasRemaining
-resourceQuotasRemaining =
-  ResourceQuotasRemaining'
-    { _rqrHourlyQuotaTokensRemaining = Nothing
-    , _rqrDailyQuotaTokensRemaining = Nothing
-    }
-
-
--- | Hourly resource quota tokens remaining.
-rqrHourlyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)
-rqrHourlyQuotaTokensRemaining
-  = lens _rqrHourlyQuotaTokensRemaining
-      (\ s a -> s{_rqrHourlyQuotaTokensRemaining = a})
-      . mapping _Coerce
-
--- | Daily resource quota remaining remaining.
-rqrDailyQuotaTokensRemaining :: Lens' ResourceQuotasRemaining (Maybe Int32)
-rqrDailyQuotaTokensRemaining
-  = lens _rqrDailyQuotaTokensRemaining
-      (\ s a -> s{_rqrDailyQuotaTokensRemaining = a})
-      . mapping _Coerce
-
-instance FromJSON ResourceQuotasRemaining where
-        parseJSON
-          = withObject "ResourceQuotasRemaining"
-              (\ o ->
-                 ResourceQuotasRemaining' <$>
-                   (o .:? "hourlyQuotaTokensRemaining") <*>
-                     (o .:? "dailyQuotaTokensRemaining"))
-
-instance ToJSON ResourceQuotasRemaining where
-        toJSON ResourceQuotasRemaining'{..}
-          = object
-              (catMaybes
-                 [("hourlyQuotaTokensRemaining" .=) <$>
-                    _rqrHourlyQuotaTokensRemaining,
-                  ("dailyQuotaTokensRemaining" .=) <$>
-                    _rqrDailyQuotaTokensRemaining])
-
--- | Dimension filter specifies the filtering options on a dimension.
---
--- /See:/ 'segmentDimensionFilter' smart constructor.
-data SegmentDimensionFilter =
-  SegmentDimensionFilter'
-    { _sdfOperator           :: !(Maybe SegmentDimensionFilterOperator)
-    , _sdfMinComparisonValue :: !(Maybe Text)
-    , _sdfMaxComparisonValue :: !(Maybe Text)
-    , _sdfExpressions        :: !(Maybe [Text])
-    , _sdfDimensionName      :: !(Maybe Text)
-    , _sdfCaseSensitive      :: !(Maybe Bool)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SegmentDimensionFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdfOperator'
---
--- * 'sdfMinComparisonValue'
---
--- * 'sdfMaxComparisonValue'
---
--- * 'sdfExpressions'
---
--- * 'sdfDimensionName'
---
--- * 'sdfCaseSensitive'
-segmentDimensionFilter
-    :: SegmentDimensionFilter
-segmentDimensionFilter =
-  SegmentDimensionFilter'
-    { _sdfOperator = Nothing
-    , _sdfMinComparisonValue = Nothing
-    , _sdfMaxComparisonValue = Nothing
-    , _sdfExpressions = Nothing
-    , _sdfDimensionName = Nothing
-    , _sdfCaseSensitive = Nothing
-    }
-
-
--- | The operator to use to match the dimension with the expressions.
-sdfOperator :: Lens' SegmentDimensionFilter (Maybe SegmentDimensionFilterOperator)
-sdfOperator
-  = lens _sdfOperator (\ s a -> s{_sdfOperator = a})
-
--- | Minimum comparison values for \`BETWEEN\` match type.
-sdfMinComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)
-sdfMinComparisonValue
-  = lens _sdfMinComparisonValue
-      (\ s a -> s{_sdfMinComparisonValue = a})
-
--- | Maximum comparison values for \`BETWEEN\` match type.
-sdfMaxComparisonValue :: Lens' SegmentDimensionFilter (Maybe Text)
-sdfMaxComparisonValue
-  = lens _sdfMaxComparisonValue
-      (\ s a -> s{_sdfMaxComparisonValue = a})
-
--- | The list of expressions, only the first element is used for all
--- operators
-sdfExpressions :: Lens' SegmentDimensionFilter [Text]
-sdfExpressions
-  = lens _sdfExpressions
-      (\ s a -> s{_sdfExpressions = a})
-      . _Default
-      . _Coerce
-
--- | Name of the dimension for which the filter is being applied.
-sdfDimensionName :: Lens' SegmentDimensionFilter (Maybe Text)
-sdfDimensionName
-  = lens _sdfDimensionName
-      (\ s a -> s{_sdfDimensionName = a})
-
--- | Should the match be case sensitive, ignored for \`IN_LIST\` operator.
-sdfCaseSensitive :: Lens' SegmentDimensionFilter (Maybe Bool)
-sdfCaseSensitive
-  = lens _sdfCaseSensitive
-      (\ s a -> s{_sdfCaseSensitive = a})
-
-instance FromJSON SegmentDimensionFilter where
-        parseJSON
-          = withObject "SegmentDimensionFilter"
-              (\ o ->
-                 SegmentDimensionFilter' <$>
-                   (o .:? "operator") <*> (o .:? "minComparisonValue")
-                     <*> (o .:? "maxComparisonValue")
-                     <*> (o .:? "expressions" .!= mempty)
-                     <*> (o .:? "dimensionName")
-                     <*> (o .:? "caseSensitive"))
-
-instance ToJSON SegmentDimensionFilter where
-        toJSON SegmentDimensionFilter'{..}
-          = object
-              (catMaybes
-                 [("operator" .=) <$> _sdfOperator,
-                  ("minComparisonValue" .=) <$> _sdfMinComparisonValue,
-                  ("maxComparisonValue" .=) <$> _sdfMaxComparisonValue,
-                  ("expressions" .=) <$> _sdfExpressions,
-                  ("dimensionName" .=) <$> _sdfDimensionName,
-                  ("caseSensitive" .=) <$> _sdfCaseSensitive])
-
--- | Dynamic segment definition for defining the segment within the request.
--- A segment can select users, sessions or both.
---
--- /See:/ 'dynamicSegment' smart constructor.
-data DynamicSegment =
-  DynamicSegment'
-    { _dsUserSegment    :: !(Maybe SegmentDefinition)
-    , _dsName           :: !(Maybe Text)
-    , _dsSessionSegment :: !(Maybe SegmentDefinition)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DynamicSegment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsUserSegment'
---
--- * 'dsName'
---
--- * 'dsSessionSegment'
-dynamicSegment
-    :: DynamicSegment
-dynamicSegment =
-  DynamicSegment'
-    {_dsUserSegment = Nothing, _dsName = Nothing, _dsSessionSegment = Nothing}
-
-
--- | User Segment to select users to include in the segment.
-dsUserSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)
-dsUserSegment
-  = lens _dsUserSegment
-      (\ s a -> s{_dsUserSegment = a})
-
--- | The name of the dynamic segment.
-dsName :: Lens' DynamicSegment (Maybe Text)
-dsName = lens _dsName (\ s a -> s{_dsName = a})
-
--- | Session Segment to select sessions to include in the segment.
-dsSessionSegment :: Lens' DynamicSegment (Maybe SegmentDefinition)
-dsSessionSegment
-  = lens _dsSessionSegment
-      (\ s a -> s{_dsSessionSegment = a})
-
-instance FromJSON DynamicSegment where
-        parseJSON
-          = withObject "DynamicSegment"
-              (\ o ->
-                 DynamicSegment' <$>
-                   (o .:? "userSegment") <*> (o .:? "name") <*>
-                     (o .:? "sessionSegment"))
-
-instance ToJSON DynamicSegment where
-        toJSON DynamicSegment'{..}
-          = object
-              (catMaybes
-                 [("userSegment" .=) <$> _dsUserSegment,
-                  ("name" .=) <$> _dsName,
-                  ("sessionSegment" .=) <$> _dsSessionSegment])
-
--- | Represents a group of metric filters. Set the operator value to specify
--- how the filters are logically combined.
---
--- /See:/ 'metricFilterClause' smart constructor.
-data MetricFilterClause =
-  MetricFilterClause'
-    { _mfcOperator :: !(Maybe MetricFilterClauseOperator)
-    , _mfcFilters  :: !(Maybe [MetricFilter])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricFilterClause' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mfcOperator'
---
--- * 'mfcFilters'
-metricFilterClause
-    :: MetricFilterClause
-metricFilterClause =
-  MetricFilterClause' {_mfcOperator = Nothing, _mfcFilters = Nothing}
-
-
--- | The operator for combining multiple metric filters. If unspecified, it
--- is treated as an \`OR\`.
-mfcOperator :: Lens' MetricFilterClause (Maybe MetricFilterClauseOperator)
-mfcOperator
-  = lens _mfcOperator (\ s a -> s{_mfcOperator = a})
-
--- | The repeated set of filters. They are logically combined based on the
--- operator specified.
-mfcFilters :: Lens' MetricFilterClause [MetricFilter]
-mfcFilters
-  = lens _mfcFilters (\ s a -> s{_mfcFilters = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON MetricFilterClause where
-        parseJSON
-          = withObject "MetricFilterClause"
-              (\ o ->
-                 MetricFilterClause' <$>
-                   (o .:? "operator") <*> (o .:? "filters" .!= mempty))
-
-instance ToJSON MetricFilterClause where
-        toJSON MetricFilterClause'{..}
-          = object
-              (catMaybes
-                 [("operator" .=) <$> _mfcOperator,
-                  ("filters" .=) <$> _mfcFilters])
-
--- | Column headers.
---
--- /See:/ 'columnHeader' smart constructor.
-data ColumnHeader =
-  ColumnHeader'
-    { _chMetricHeader :: !(Maybe MetricHeader)
-    , _chDimensions   :: !(Maybe [Text])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ColumnHeader' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'chMetricHeader'
---
--- * 'chDimensions'
-columnHeader
-    :: ColumnHeader
-columnHeader =
-  ColumnHeader' {_chMetricHeader = Nothing, _chDimensions = Nothing}
-
-
--- | Metric headers for the metrics in the response.
-chMetricHeader :: Lens' ColumnHeader (Maybe MetricHeader)
-chMetricHeader
-  = lens _chMetricHeader
-      (\ s a -> s{_chMetricHeader = a})
-
--- | The dimension names in the response.
-chDimensions :: Lens' ColumnHeader [Text]
-chDimensions
-  = lens _chDimensions (\ s a -> s{_chDimensions = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON ColumnHeader where
-        parseJSON
-          = withObject "ColumnHeader"
-              (\ o ->
-                 ColumnHeader' <$>
-                   (o .:? "metricHeader") <*>
-                     (o .:? "dimensions" .!= mempty))
-
-instance ToJSON ColumnHeader where
-        toJSON ColumnHeader'{..}
-          = object
-              (catMaybes
-                 [("metricHeader" .=) <$> _chMetricHeader,
-                  ("dimensions" .=) <$> _chDimensions])
-
--- | The response from \`userActivity:get\` call.
---
--- /See:/ 'searchUserActivityResponse' smart constructor.
-data SearchUserActivityResponse =
-  SearchUserActivityResponse'
-    { _suarNextPageToken :: !(Maybe Text)
-    , _suarSampleRate    :: !(Maybe (Textual Double))
-    , _suarSessions      :: !(Maybe [UserActivitySession])
-    , _suarTotalRows     :: !(Maybe (Textual Int32))
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchUserActivityResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'suarNextPageToken'
---
--- * 'suarSampleRate'
---
--- * 'suarSessions'
---
--- * 'suarTotalRows'
-searchUserActivityResponse
-    :: SearchUserActivityResponse
-searchUserActivityResponse =
-  SearchUserActivityResponse'
-    { _suarNextPageToken = Nothing
-    , _suarSampleRate = Nothing
-    , _suarSessions = Nothing
-    , _suarTotalRows = Nothing
-    }
-
-
--- | This token should be passed to
--- [SearchUserActivityRequest](#SearchUserActivityRequest) to retrieve the
--- next page.
-suarNextPageToken :: Lens' SearchUserActivityResponse (Maybe Text)
-suarNextPageToken
-  = lens _suarNextPageToken
-      (\ s a -> s{_suarNextPageToken = a})
-
--- | This field represents the [sampling
--- rate](https:\/\/support.google.com\/analytics\/answer\/2637192) for the
--- given request and is a number between 0.0 to 1.0. See [developer
--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for
--- details.
-suarSampleRate :: Lens' SearchUserActivityResponse (Maybe Double)
-suarSampleRate
-  = lens _suarSampleRate
-      (\ s a -> s{_suarSampleRate = a})
-      . mapping _Coerce
-
--- | Each record represents a session (device details, duration, etc).
-suarSessions :: Lens' SearchUserActivityResponse [UserActivitySession]
-suarSessions
-  = lens _suarSessions (\ s a -> s{_suarSessions = a})
-      . _Default
-      . _Coerce
-
--- | Total rows returned by this query (across different pages).
-suarTotalRows :: Lens' SearchUserActivityResponse (Maybe Int32)
-suarTotalRows
-  = lens _suarTotalRows
-      (\ s a -> s{_suarTotalRows = a})
-      . mapping _Coerce
-
-instance FromJSON SearchUserActivityResponse where
-        parseJSON
-          = withObject "SearchUserActivityResponse"
-              (\ o ->
-                 SearchUserActivityResponse' <$>
-                   (o .:? "nextPageToken") <*> (o .:? "sampleRate") <*>
-                     (o .:? "sessions" .!= mempty)
-                     <*> (o .:? "totalRows"))
-
-instance ToJSON SearchUserActivityResponse where
-        toJSON SearchUserActivityResponse'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _suarNextPageToken,
-                  ("sampleRate" .=) <$> _suarSampleRate,
-                  ("sessions" .=) <$> _suarSessions,
-                  ("totalRows" .=) <$> _suarTotalRows])
-
---
--- /See:/ 'screenviewData' smart constructor.
-data ScreenviewData =
-  ScreenviewData'
-    { _sdMobileDeviceModel    :: !(Maybe Text)
-    , _sdMobileDeviceBranding :: !(Maybe Text)
-    , _sdAppName              :: !(Maybe Text)
-    , _sdScreenName           :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ScreenviewData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdMobileDeviceModel'
---
--- * 'sdMobileDeviceBranding'
---
--- * 'sdAppName'
---
--- * 'sdScreenName'
-screenviewData
-    :: ScreenviewData
-screenviewData =
-  ScreenviewData'
-    { _sdMobileDeviceModel = Nothing
-    , _sdMobileDeviceBranding = Nothing
-    , _sdAppName = Nothing
-    , _sdScreenName = Nothing
-    }
-
-
--- | Mobile device model. Eg: \"Pixel\", \"iPhone\" etc.
-sdMobileDeviceModel :: Lens' ScreenviewData (Maybe Text)
-sdMobileDeviceModel
-  = lens _sdMobileDeviceModel
-      (\ s a -> s{_sdMobileDeviceModel = a})
-
--- | Mobile manufacturer or branded name. Eg: \"Google\", \"Apple\" etc.
-sdMobileDeviceBranding :: Lens' ScreenviewData (Maybe Text)
-sdMobileDeviceBranding
-  = lens _sdMobileDeviceBranding
-      (\ s a -> s{_sdMobileDeviceBranding = a})
-
--- | The application name.
-sdAppName :: Lens' ScreenviewData (Maybe Text)
-sdAppName
-  = lens _sdAppName (\ s a -> s{_sdAppName = a})
-
--- | The name of the screen.
-sdScreenName :: Lens' ScreenviewData (Maybe Text)
-sdScreenName
-  = lens _sdScreenName (\ s a -> s{_sdScreenName = a})
-
-instance FromJSON ScreenviewData where
-        parseJSON
-          = withObject "ScreenviewData"
-              (\ o ->
-                 ScreenviewData' <$>
-                   (o .:? "mobileDeviceModel") <*>
-                     (o .:? "mobileDeviceBranding")
-                     <*> (o .:? "appName")
-                     <*> (o .:? "screenName"))
-
-instance ToJSON ScreenviewData where
-        toJSON ScreenviewData'{..}
-          = object
-              (catMaybes
-                 [("mobileDeviceModel" .=) <$> _sdMobileDeviceModel,
-                  ("mobileDeviceBranding" .=) <$>
-                    _sdMobileDeviceBranding,
-                  ("appName" .=) <$> _sdAppName,
-                  ("screenName" .=) <$> _sdScreenName])
diff --git a/gen/Network/Google/AnalyticsReporting/Types/Sum.hs b/gen/Network/Google/AnalyticsReporting/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/Google/AnalyticsReporting/Types/Sum.hs
+++ /dev/null
@@ -1,917 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- |
--- Module      : Network.Google.AnalyticsReporting.Types.Sum
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.Google.AnalyticsReporting.Types.Sum where
-
-import           Network.Google.Prelude hiding (Bytes)
-
--- | Is the metric \`EQUAL\`, \`LESS_THAN\` or \`GREATER_THAN\` the
--- comparisonValue, the default is \`EQUAL\`. If the operator is
--- \`IS_MISSING\`, checks if the metric is missing and would ignore the
--- comparisonValue.
-data MetricFilterOperator
-    = OperatorUnspecified
-      -- ^ @OPERATOR_UNSPECIFIED@
-      -- If the operator is not specified, it is treated as \`EQUAL\`.
-    | Equal
-      -- ^ @EQUAL@
-      -- Should the value of the metric be exactly equal to the comparison value.
-    | LessThan
-      -- ^ @LESS_THAN@
-      -- Should the value of the metric be less than to the comparison value.
-    | GreaterThan
-      -- ^ @GREATER_THAN@
-      -- Should the value of the metric be greater than to the comparison value.
-    | IsMissing
-      -- ^ @IS_MISSING@
-      -- Validates if the metric is missing. Doesn\'t take comparisonValue into
-      -- account.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable MetricFilterOperator
-
-instance FromHttpApiData MetricFilterOperator where
-    parseQueryParam = \case
-        "OPERATOR_UNSPECIFIED" -> Right OperatorUnspecified
-        "EQUAL" -> Right Equal
-        "LESS_THAN" -> Right LessThan
-        "GREATER_THAN" -> Right GreaterThan
-        "IS_MISSING" -> Right IsMissing
-        x -> Left ("Unable to parse MetricFilterOperator from: " <> x)
-
-instance ToHttpApiData MetricFilterOperator where
-    toQueryParam = \case
-        OperatorUnspecified -> "OPERATOR_UNSPECIFIED"
-        Equal -> "EQUAL"
-        LessThan -> "LESS_THAN"
-        GreaterThan -> "GREATER_THAN"
-        IsMissing -> "IS_MISSING"
-
-instance FromJSON MetricFilterOperator where
-    parseJSON = parseJSONText "MetricFilterOperator"
-
-instance ToJSON MetricFilterOperator where
-    toJSON = toJSONText
-
--- | The operator for combining multiple dimension filters. If unspecified,
--- it is treated as an \`OR\`.
-data DimensionFilterClauseOperator
-    = DFCOOperatorUnspecified
-      -- ^ @OPERATOR_UNSPECIFIED@
-      -- Unspecified operator. It is treated as an \`OR\`.
-    | DFCOOR
-      -- ^ @OR@
-      -- The logical \`OR\` operator.
-    | DFCOAnd
-      -- ^ @AND@
-      -- The logical \`AND\` operator.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable DimensionFilterClauseOperator
-
-instance FromHttpApiData DimensionFilterClauseOperator where
-    parseQueryParam = \case
-        "OPERATOR_UNSPECIFIED" -> Right DFCOOperatorUnspecified
-        "OR" -> Right DFCOOR
-        "AND" -> Right DFCOAnd
-        x -> Left ("Unable to parse DimensionFilterClauseOperator from: " <> x)
-
-instance ToHttpApiData DimensionFilterClauseOperator where
-    toQueryParam = \case
-        DFCOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"
-        DFCOOR -> "OR"
-        DFCOAnd -> "AND"
-
-instance FromJSON DimensionFilterClauseOperator where
-    parseJSON = parseJSONText "DimensionFilterClauseOperator"
-
-instance ToJSON DimensionFilterClauseOperator where
-    toJSON = toJSONText
-
--- | Type of the cohort. The only supported type as of now is
--- \`FIRST_VISIT_DATE\`. If this field is unspecified the cohort is treated
--- as \`FIRST_VISIT_DATE\` type cohort.
-data CohortType
-    = UnspecifiedCohortType
-      -- ^ @UNSPECIFIED_COHORT_TYPE@
-      -- If unspecified it\'s treated as \`FIRST_VISIT_DATE\`.
-    | FirstVisitDate
-      -- ^ @FIRST_VISIT_DATE@
-      -- Cohorts that are selected based on first visit date.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable CohortType
-
-instance FromHttpApiData CohortType where
-    parseQueryParam = \case
-        "UNSPECIFIED_COHORT_TYPE" -> Right UnspecifiedCohortType
-        "FIRST_VISIT_DATE" -> Right FirstVisitDate
-        x -> Left ("Unable to parse CohortType from: " <> x)
-
-instance ToHttpApiData CohortType where
-    toQueryParam = \case
-        UnspecifiedCohortType -> "UNSPECIFIED_COHORT_TYPE"
-        FirstVisitDate -> "FIRST_VISIT_DATE"
-
-instance FromJSON CohortType where
-    parseJSON = parseJSONText "CohortType"
-
-instance ToJSON CohortType where
-    toJSON = toJSONText
-
--- | The order type. The default orderType is \`VALUE\`.
-data OrderByOrderType
-    = OrderTypeUnspecified
-      -- ^ @ORDER_TYPE_UNSPECIFIED@
-      -- Unspecified order type will be treated as sort based on value.
-    | Value
-      -- ^ @VALUE@
-      -- The sort order is based on the value of the chosen column; looks only at
-      -- the first date range.
-    | Delta
-      -- ^ @DELTA@
-      -- The sort order is based on the difference of the values of the chosen
-      -- column between the first two date ranges. Usable only if there are
-      -- exactly two date ranges.
-    | Smart
-      -- ^ @SMART@
-      -- The sort order is based on weighted value of the chosen column. If
-      -- column has n\/d format, then weighted value of this ratio will be \`(n +
-      -- totals.n)\/(d + totals.d)\` Usable only for metrics that represent
-      -- ratios.
-    | HistogramBucket
-      -- ^ @HISTOGRAM_BUCKET@
-      -- Histogram order type is applicable only to dimension columns with
-      -- non-empty histogram-buckets.
-    | DimensionAsInteger
-      -- ^ @DIMENSION_AS_INTEGER@
-      -- If the dimensions are fixed length numbers, ordinary sort would just
-      -- work fine. \`DIMENSION_AS_INTEGER\` can be used if the dimensions are
-      -- variable length numbers.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable OrderByOrderType
-
-instance FromHttpApiData OrderByOrderType where
-    parseQueryParam = \case
-        "ORDER_TYPE_UNSPECIFIED" -> Right OrderTypeUnspecified
-        "VALUE" -> Right Value
-        "DELTA" -> Right Delta
-        "SMART" -> Right Smart
-        "HISTOGRAM_BUCKET" -> Right HistogramBucket
-        "DIMENSION_AS_INTEGER" -> Right DimensionAsInteger
-        x -> Left ("Unable to parse OrderByOrderType from: " <> x)
-
-instance ToHttpApiData OrderByOrderType where
-    toQueryParam = \case
-        OrderTypeUnspecified -> "ORDER_TYPE_UNSPECIFIED"
-        Value -> "VALUE"
-        Delta -> "DELTA"
-        Smart -> "SMART"
-        HistogramBucket -> "HISTOGRAM_BUCKET"
-        DimensionAsInteger -> "DIMENSION_AS_INTEGER"
-
-instance FromJSON OrderByOrderType where
-    parseJSON = parseJSONText "OrderByOrderType"
-
-instance ToJSON OrderByOrderType where
-    toJSON = toJSONText
-
--- | Action associated with this e-commerce action.
-data EcommerceDataActionType
-    = Unknown
-      -- ^ @UNKNOWN@
-      -- Action type is not known.
-    | Click
-      -- ^ @CLICK@
-      -- Click through of product lists.
-    | DetailsView
-      -- ^ @DETAILS_VIEW@
-      -- Product detail views.
-    | AddToCart
-      -- ^ @ADD_TO_CART@
-      -- Add product(s) to cart.
-    | RemoveFromCart
-      -- ^ @REMOVE_FROM_CART@
-      -- Remove product(s) from cart.
-    | Checkout
-      -- ^ @CHECKOUT@
-      -- Check out.
-    | Payment
-      -- ^ @PAYMENT@
-      -- Completed purchase.
-    | Refund
-      -- ^ @REFUND@
-      -- Refund of purchase.
-    | CheckoutOption
-      -- ^ @CHECKOUT_OPTION@
-      -- Checkout options.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable EcommerceDataActionType
-
-instance FromHttpApiData EcommerceDataActionType where
-    parseQueryParam = \case
-        "UNKNOWN" -> Right Unknown
-        "CLICK" -> Right Click
-        "DETAILS_VIEW" -> Right DetailsView
-        "ADD_TO_CART" -> Right AddToCart
-        "REMOVE_FROM_CART" -> Right RemoveFromCart
-        "CHECKOUT" -> Right Checkout
-        "PAYMENT" -> Right Payment
-        "REFUND" -> Right Refund
-        "CHECKOUT_OPTION" -> Right CheckoutOption
-        x -> Left ("Unable to parse EcommerceDataActionType from: " <> x)
-
-instance ToHttpApiData EcommerceDataActionType where
-    toQueryParam = \case
-        Unknown -> "UNKNOWN"
-        Click -> "CLICK"
-        DetailsView -> "DETAILS_VIEW"
-        AddToCart -> "ADD_TO_CART"
-        RemoveFromCart -> "REMOVE_FROM_CART"
-        Checkout -> "CHECKOUT"
-        Payment -> "PAYMENT"
-        Refund -> "REFUND"
-        CheckoutOption -> "CHECKOUT_OPTION"
-
-instance FromJSON EcommerceDataActionType where
-    parseJSON = parseJSONText "EcommerceDataActionType"
-
-instance ToJSON EcommerceDataActionType where
-    toJSON = toJSONText
-
--- | The sorting order for the field.
-data OrderBySortOrder
-    = SortOrderUnspecified
-      -- ^ @SORT_ORDER_UNSPECIFIED@
-      -- If the sort order is unspecified, the default is ascending.
-    | Ascending
-      -- ^ @ASCENDING@
-      -- Ascending sort. The field will be sorted in an ascending manner.
-    | Descending
-      -- ^ @DESCENDING@
-      -- Descending sort. The field will be sorted in a descending manner.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable OrderBySortOrder
-
-instance FromHttpApiData OrderBySortOrder where
-    parseQueryParam = \case
-        "SORT_ORDER_UNSPECIFIED" -> Right SortOrderUnspecified
-        "ASCENDING" -> Right Ascending
-        "DESCENDING" -> Right Descending
-        x -> Left ("Unable to parse OrderBySortOrder from: " <> x)
-
-instance ToHttpApiData OrderBySortOrder where
-    toQueryParam = \case
-        SortOrderUnspecified -> "SORT_ORDER_UNSPECIFIED"
-        Ascending -> "ASCENDING"
-        Descending -> "DESCENDING"
-
-instance FromJSON OrderBySortOrder where
-    parseJSON = parseJSONText "OrderBySortOrder"
-
-instance ToJSON OrderBySortOrder where
-    toJSON = toJSONText
-
--- | Specifies is the operation to perform to compare the metric. The default
--- is \`EQUAL\`.
-data SegmentMetricFilterOperator
-    = SMFOUnspecifiedOperator
-      -- ^ @UNSPECIFIED_OPERATOR@
-      -- Unspecified operator is treated as \`LESS_THAN\` operator.
-    | SMFOLessThan
-      -- ^ @LESS_THAN@
-      -- Checks if the metric value is less than comparison value.
-    | SMFOGreaterThan
-      -- ^ @GREATER_THAN@
-      -- Checks if the metric value is greater than comparison value.
-    | SMFOEqual
-      -- ^ @EQUAL@
-      -- Equals operator.
-    | SMFOBetween
-      -- ^ @BETWEEN@
-      -- For between operator, both the minimum and maximum are exclusive. We
-      -- will use \`LT\` and \`GT\` for comparison.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SegmentMetricFilterOperator
-
-instance FromHttpApiData SegmentMetricFilterOperator where
-    parseQueryParam = \case
-        "UNSPECIFIED_OPERATOR" -> Right SMFOUnspecifiedOperator
-        "LESS_THAN" -> Right SMFOLessThan
-        "GREATER_THAN" -> Right SMFOGreaterThan
-        "EQUAL" -> Right SMFOEqual
-        "BETWEEN" -> Right SMFOBetween
-        x -> Left ("Unable to parse SegmentMetricFilterOperator from: " <> x)
-
-instance ToHttpApiData SegmentMetricFilterOperator where
-    toQueryParam = \case
-        SMFOUnspecifiedOperator -> "UNSPECIFIED_OPERATOR"
-        SMFOLessThan -> "LESS_THAN"
-        SMFOGreaterThan -> "GREATER_THAN"
-        SMFOEqual -> "EQUAL"
-        SMFOBetween -> "BETWEEN"
-
-instance FromJSON SegmentMetricFilterOperator where
-    parseJSON = parseJSONText "SegmentMetricFilterOperator"
-
-instance ToJSON SegmentMetricFilterOperator where
-    toJSON = toJSONText
-
--- | The type of the metric, for example \`INTEGER\`.
-data MetricHeaderEntryType
-    = MetricTypeUnspecified
-      -- ^ @METRIC_TYPE_UNSPECIFIED@
-      -- Metric type is unspecified.
-    | Integer
-      -- ^ @INTEGER@
-      -- Integer metric.
-    | Float
-      -- ^ @FLOAT@
-      -- Float metric.
-    | Currency
-      -- ^ @CURRENCY@
-      -- Currency metric.
-    | Percent
-      -- ^ @PERCENT@
-      -- Percentage metric.
-    | Time
-      -- ^ @TIME@
-      -- Time metric in \`HH:MM:SS\` format.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable MetricHeaderEntryType
-
-instance FromHttpApiData MetricHeaderEntryType where
-    parseQueryParam = \case
-        "METRIC_TYPE_UNSPECIFIED" -> Right MetricTypeUnspecified
-        "INTEGER" -> Right Integer
-        "FLOAT" -> Right Float
-        "CURRENCY" -> Right Currency
-        "PERCENT" -> Right Percent
-        "TIME" -> Right Time
-        x -> Left ("Unable to parse MetricHeaderEntryType from: " <> x)
-
-instance ToHttpApiData MetricHeaderEntryType where
-    toQueryParam = \case
-        MetricTypeUnspecified -> "METRIC_TYPE_UNSPECIFIED"
-        Integer -> "INTEGER"
-        Float -> "FLOAT"
-        Currency -> "CURRENCY"
-        Percent -> "PERCENT"
-        Time -> "TIME"
-
-instance FromJSON MetricHeaderEntryType where
-    parseJSON = parseJSONText "MetricHeaderEntryType"
-
-instance ToJSON MetricHeaderEntryType where
-    toJSON = toJSONText
-
--- | The desired report
--- [sample](https:\/\/support.google.com\/analytics\/answer\/2637192) size.
--- If the the \`samplingLevel\` field is unspecified the \`DEFAULT\`
--- sampling level is used. Every [ReportRequest](#ReportRequest) within a
--- \`batchGet\` method must contain the same \`samplingLevel\` definition.
--- See [developer
--- guide](\/analytics\/devguides\/reporting\/core\/v4\/basics#sampling) for
--- details.
-data ReportRequestSamplingLevel
-    = SamplingUnspecified
-      -- ^ @SAMPLING_UNSPECIFIED@
-      -- If the \`samplingLevel\` field is unspecified the \`DEFAULT\` sampling
-      -- level is used.
-    | Default
-      -- ^ @DEFAULT@
-      -- Returns response with a sample size that balances speed and accuracy.
-    | Small
-      -- ^ @SMALL@
-      -- It returns a fast response with a smaller sampling size.
-    | Large
-      -- ^ @LARGE@
-      -- Returns a more accurate response using a large sampling size. But this
-      -- may result in response being slower.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable ReportRequestSamplingLevel
-
-instance FromHttpApiData ReportRequestSamplingLevel where
-    parseQueryParam = \case
-        "SAMPLING_UNSPECIFIED" -> Right SamplingUnspecified
-        "DEFAULT" -> Right Default
-        "SMALL" -> Right Small
-        "LARGE" -> Right Large
-        x -> Left ("Unable to parse ReportRequestSamplingLevel from: " <> x)
-
-instance ToHttpApiData ReportRequestSamplingLevel where
-    toQueryParam = \case
-        SamplingUnspecified -> "SAMPLING_UNSPECIFIED"
-        Default -> "DEFAULT"
-        Small -> "SMALL"
-        Large -> "LARGE"
-
-instance FromJSON ReportRequestSamplingLevel where
-    parseJSON = parseJSONText "ReportRequestSamplingLevel"
-
-instance ToJSON ReportRequestSamplingLevel where
-    toJSON = toJSONText
-
--- | V1 error format.
-data Xgafv
-    = X1
-      -- ^ @1@
-      -- v1 error format
-    | X2
-      -- ^ @2@
-      -- v2 error format
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable Xgafv
-
-instance FromHttpApiData Xgafv where
-    parseQueryParam = \case
-        "1" -> Right X1
-        "2" -> Right X2
-        x -> Left ("Unable to parse Xgafv from: " <> x)
-
-instance ToHttpApiData Xgafv where
-    toQueryParam = \case
-        X1 -> "1"
-        X2 -> "2"
-
-instance FromJSON Xgafv where
-    parseJSON = parseJSONText "Xgafv"
-
-instance ToJSON Xgafv where
-    toJSON = toJSONText
-
--- | Specifies if the step immediately precedes or can be any time before the
--- next step.
-data SegmentSequenceStepMatchType
-    = UnspecifiedMatchType
-      -- ^ @UNSPECIFIED_MATCH_TYPE@
-      -- Unspecified match type is treated as precedes.
-    | Precedes
-      -- ^ @PRECEDES@
-      -- Operator indicates that the previous step precedes the next step.
-    | ImmediatelyPrecedes
-      -- ^ @IMMEDIATELY_PRECEDES@
-      -- Operator indicates that the previous step immediately precedes the next
-      -- step.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SegmentSequenceStepMatchType
-
-instance FromHttpApiData SegmentSequenceStepMatchType where
-    parseQueryParam = \case
-        "UNSPECIFIED_MATCH_TYPE" -> Right UnspecifiedMatchType
-        "PRECEDES" -> Right Precedes
-        "IMMEDIATELY_PRECEDES" -> Right ImmediatelyPrecedes
-        x -> Left ("Unable to parse SegmentSequenceStepMatchType from: " <> x)
-
-instance ToHttpApiData SegmentSequenceStepMatchType where
-    toQueryParam = \case
-        UnspecifiedMatchType -> "UNSPECIFIED_MATCH_TYPE"
-        Precedes -> "PRECEDES"
-        ImmediatelyPrecedes -> "IMMEDIATELY_PRECEDES"
-
-instance FromJSON SegmentSequenceStepMatchType where
-    parseJSON = parseJSONText "SegmentSequenceStepMatchType"
-
-instance ToJSON SegmentSequenceStepMatchType where
-    toJSON = toJSONText
-
--- | Scope for a metric defines the level at which that metric is defined.
--- The specified metric scope must be equal to or greater than its primary
--- scope as defined in the data model. The primary scope is defined by if
--- the segment is selecting users or sessions.
-data SegmentMetricFilterScope
-    = SMFSUnspecifiedScope
-      -- ^ @UNSPECIFIED_SCOPE@
-      -- If the scope is unspecified, it defaults to the condition scope,
-      -- \`USER\` or \`SESSION\` depending on if the segment is trying to choose
-      -- users or sessions.
-    | SMFSProduct
-      -- ^ @PRODUCT@
-      -- Product scope.
-    | SMFSHit
-      -- ^ @HIT@
-      -- Hit scope.
-    | SMFSSession
-      -- ^ @SESSION@
-      -- Session scope.
-    | SMFSUser
-      -- ^ @USER@
-      -- User scope.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SegmentMetricFilterScope
-
-instance FromHttpApiData SegmentMetricFilterScope where
-    parseQueryParam = \case
-        "UNSPECIFIED_SCOPE" -> Right SMFSUnspecifiedScope
-        "PRODUCT" -> Right SMFSProduct
-        "HIT" -> Right SMFSHit
-        "SESSION" -> Right SMFSSession
-        "USER" -> Right SMFSUser
-        x -> Left ("Unable to parse SegmentMetricFilterScope from: " <> x)
-
-instance ToHttpApiData SegmentMetricFilterScope where
-    toQueryParam = \case
-        SMFSUnspecifiedScope -> "UNSPECIFIED_SCOPE"
-        SMFSProduct -> "PRODUCT"
-        SMFSHit -> "HIT"
-        SMFSSession -> "SESSION"
-        SMFSUser -> "USER"
-
-instance FromJSON SegmentMetricFilterScope where
-    parseJSON = parseJSONText "SegmentMetricFilterScope"
-
-instance ToJSON SegmentMetricFilterScope where
-    toJSON = toJSONText
-
--- | The type of this e-commerce activity.
-data EcommerceDataEcommerceType
-    = EcommerceTypeUnspecified
-      -- ^ @ECOMMERCE_TYPE_UNSPECIFIED@
-      -- Used when the e-commerce activity type is unspecified.
-    | Classic
-      -- ^ @CLASSIC@
-      -- Used when activity has classic (non-enhanced) e-commerce information.
-    | Enhanced
-      -- ^ @ENHANCED@
-      -- Used when activity has enhanced e-commerce information.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable EcommerceDataEcommerceType
-
-instance FromHttpApiData EcommerceDataEcommerceType where
-    parseQueryParam = \case
-        "ECOMMERCE_TYPE_UNSPECIFIED" -> Right EcommerceTypeUnspecified
-        "CLASSIC" -> Right Classic
-        "ENHANCED" -> Right Enhanced
-        x -> Left ("Unable to parse EcommerceDataEcommerceType from: " <> x)
-
-instance ToHttpApiData EcommerceDataEcommerceType where
-    toQueryParam = \case
-        EcommerceTypeUnspecified -> "ECOMMERCE_TYPE_UNSPECIFIED"
-        Classic -> "CLASSIC"
-        Enhanced -> "ENHANCED"
-
-instance FromJSON EcommerceDataEcommerceType where
-    parseJSON = parseJSONText "EcommerceDataEcommerceType"
-
-instance ToJSON EcommerceDataEcommerceType where
-    toJSON = toJSONText
-
--- | How to match the dimension to the expression. The default is REGEXP.
-data DimensionFilterOperator
-    = DFOOperatorUnspecified
-      -- ^ @OPERATOR_UNSPECIFIED@
-      -- If the match type is unspecified, it is treated as a \`REGEXP\`.
-    | DFORegexp
-      -- ^ @REGEXP@
-      -- The match expression is treated as a regular expression. All match types
-      -- are not treated as regular expressions.
-    | DFOBeginsWith
-      -- ^ @BEGINS_WITH@
-      -- Matches the value which begin with the match expression provided.
-    | DFOEndsWith
-      -- ^ @ENDS_WITH@
-      -- Matches the values which end with the match expression provided.
-    | DFOPartial
-      -- ^ @PARTIAL@
-      -- Substring match.
-    | DFOExact
-      -- ^ @EXACT@
-      -- The value should match the match expression entirely.
-    | DFONumericEqual
-      -- ^ @NUMERIC_EQUAL@
-      -- Integer comparison filters. case sensitivity is ignored for these and
-      -- the expression is assumed to be a string representing an integer.
-      -- Failure conditions: - If expression is not a valid int64, the client
-      -- should expect an error. - Input dimensions that are not valid int64
-      -- values will never match the filter.
-    | DFONumericGreaterThan
-      -- ^ @NUMERIC_GREATER_THAN@
-      -- Checks if the dimension is numerically greater than the match
-      -- expression. Read the description for \`NUMERIC_EQUALS\` for
-      -- restrictions.
-    | DFONumericLessThan
-      -- ^ @NUMERIC_LESS_THAN@
-      -- Checks if the dimension is numerically less than the match expression.
-      -- Read the description for \`NUMERIC_EQUALS\` for restrictions.
-    | DFOInList
-      -- ^ @IN_LIST@
-      -- This option is used to specify a dimension filter whose expression can
-      -- take any value from a selected list of values. This helps avoiding
-      -- evaluating multiple exact match dimension filters which are OR\'ed for
-      -- every single response row. For example: expressions: [\"A\", \"B\",
-      -- \"C\"] Any response row whose dimension has it is value as A, B or C,
-      -- matches this DimensionFilter.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable DimensionFilterOperator
-
-instance FromHttpApiData DimensionFilterOperator where
-    parseQueryParam = \case
-        "OPERATOR_UNSPECIFIED" -> Right DFOOperatorUnspecified
-        "REGEXP" -> Right DFORegexp
-        "BEGINS_WITH" -> Right DFOBeginsWith
-        "ENDS_WITH" -> Right DFOEndsWith
-        "PARTIAL" -> Right DFOPartial
-        "EXACT" -> Right DFOExact
-        "NUMERIC_EQUAL" -> Right DFONumericEqual
-        "NUMERIC_GREATER_THAN" -> Right DFONumericGreaterThan
-        "NUMERIC_LESS_THAN" -> Right DFONumericLessThan
-        "IN_LIST" -> Right DFOInList
-        x -> Left ("Unable to parse DimensionFilterOperator from: " <> x)
-
-instance ToHttpApiData DimensionFilterOperator where
-    toQueryParam = \case
-        DFOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"
-        DFORegexp -> "REGEXP"
-        DFOBeginsWith -> "BEGINS_WITH"
-        DFOEndsWith -> "ENDS_WITH"
-        DFOPartial -> "PARTIAL"
-        DFOExact -> "EXACT"
-        DFONumericEqual -> "NUMERIC_EQUAL"
-        DFONumericGreaterThan -> "NUMERIC_GREATER_THAN"
-        DFONumericLessThan -> "NUMERIC_LESS_THAN"
-        DFOInList -> "IN_LIST"
-
-instance FromJSON DimensionFilterOperator where
-    parseJSON = parseJSONText "DimensionFilterOperator"
-
-instance ToJSON DimensionFilterOperator where
-    toJSON = toJSONText
-
--- | Type of this activity.
-data ActivityActivityType
-    = ActivityTypeUnspecified
-      -- ^ @ACTIVITY_TYPE_UNSPECIFIED@
-      -- ActivityType will never have this value in the response. Using this type
-      -- in the request will result in an error.
-    | Pageview
-      -- ^ @PAGEVIEW@
-      -- Used when the activity resulted out of a visitor viewing a page.
-    | Screenview
-      -- ^ @SCREENVIEW@
-      -- Used when the activity resulted out of a visitor using an application on
-      -- a mobile device.
-    | Goal
-      -- ^ @GOAL@
-      -- Used to denote that a goal type activity.
-    | Ecommerce
-      -- ^ @ECOMMERCE@
-      -- An e-commerce transaction was performed by the visitor on the page.
-    | Event
-      -- ^ @EVENT@
-      -- Used when the activity is an event.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable ActivityActivityType
-
-instance FromHttpApiData ActivityActivityType where
-    parseQueryParam = \case
-        "ACTIVITY_TYPE_UNSPECIFIED" -> Right ActivityTypeUnspecified
-        "PAGEVIEW" -> Right Pageview
-        "SCREENVIEW" -> Right Screenview
-        "GOAL" -> Right Goal
-        "ECOMMERCE" -> Right Ecommerce
-        "EVENT" -> Right Event
-        x -> Left ("Unable to parse ActivityActivityType from: " <> x)
-
-instance ToHttpApiData ActivityActivityType where
-    toQueryParam = \case
-        ActivityTypeUnspecified -> "ACTIVITY_TYPE_UNSPECIFIED"
-        Pageview -> "PAGEVIEW"
-        Screenview -> "SCREENVIEW"
-        Goal -> "GOAL"
-        Ecommerce -> "ECOMMERCE"
-        Event -> "EVENT"
-
-instance FromJSON ActivityActivityType where
-    parseJSON = parseJSONText "ActivityActivityType"
-
-instance ToJSON ActivityActivityType where
-    toJSON = toJSONText
-
--- | Specifies how the metric expression should be formatted, for example
--- \`INTEGER\`.
-data MetricFormattingType
-    = MFTMetricTypeUnspecified
-      -- ^ @METRIC_TYPE_UNSPECIFIED@
-      -- Metric type is unspecified.
-    | MFTInteger
-      -- ^ @INTEGER@
-      -- Integer metric.
-    | MFTFloat
-      -- ^ @FLOAT@
-      -- Float metric.
-    | MFTCurrency
-      -- ^ @CURRENCY@
-      -- Currency metric.
-    | MFTPercent
-      -- ^ @PERCENT@
-      -- Percentage metric.
-    | MFTTime
-      -- ^ @TIME@
-      -- Time metric in \`HH:MM:SS\` format.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable MetricFormattingType
-
-instance FromHttpApiData MetricFormattingType where
-    parseQueryParam = \case
-        "METRIC_TYPE_UNSPECIFIED" -> Right MFTMetricTypeUnspecified
-        "INTEGER" -> Right MFTInteger
-        "FLOAT" -> Right MFTFloat
-        "CURRENCY" -> Right MFTCurrency
-        "PERCENT" -> Right MFTPercent
-        "TIME" -> Right MFTTime
-        x -> Left ("Unable to parse MetricFormattingType from: " <> x)
-
-instance ToHttpApiData MetricFormattingType where
-    toQueryParam = \case
-        MFTMetricTypeUnspecified -> "METRIC_TYPE_UNSPECIFIED"
-        MFTInteger -> "INTEGER"
-        MFTFloat -> "FLOAT"
-        MFTCurrency -> "CURRENCY"
-        MFTPercent -> "PERCENT"
-        MFTTime -> "TIME"
-
-instance FromJSON MetricFormattingType where
-    parseJSON = parseJSONText "MetricFormattingType"
-
-instance ToJSON MetricFormattingType where
-    toJSON = toJSONText
-
--- | The operator to use to match the dimension with the expressions.
-data SegmentDimensionFilterOperator
-    = SDFOOperatorUnspecified
-      -- ^ @OPERATOR_UNSPECIFIED@
-      -- If the match type is unspecified, it is treated as a REGEXP.
-    | SDFORegexp
-      -- ^ @REGEXP@
-      -- The match expression is treated as a regular expression. All other match
-      -- types are not treated as regular expressions.
-    | SDFOBeginsWith
-      -- ^ @BEGINS_WITH@
-      -- Matches the values which begin with the match expression provided.
-    | SDFOEndsWith
-      -- ^ @ENDS_WITH@
-      -- Matches the values which end with the match expression provided.
-    | SDFOPartial
-      -- ^ @PARTIAL@
-      -- Substring match.
-    | SDFOExact
-      -- ^ @EXACT@
-      -- The value should match the match expression entirely.
-    | SDFOInList
-      -- ^ @IN_LIST@
-      -- This option is used to specify a dimension filter whose expression can
-      -- take any value from a selected list of values. This helps avoiding
-      -- evaluating multiple exact match dimension filters which are OR\'ed for
-      -- every single response row. For example: expressions: [\"A\", \"B\",
-      -- \"C\"] Any response row whose dimension has it is value as A, B or C,
-      -- matches this DimensionFilter.
-    | SDFONumericLessThan
-      -- ^ @NUMERIC_LESS_THAN@
-      -- Integer comparison filters. case sensitivity is ignored for these and
-      -- the expression is assumed to be a string representing an integer.
-      -- Failure conditions: - if expression is not a valid int64, the client
-      -- should expect an error. - input dimensions that are not valid int64
-      -- values will never match the filter. Checks if the dimension is
-      -- numerically less than the match expression.
-    | SDFONumericGreaterThan
-      -- ^ @NUMERIC_GREATER_THAN@
-      -- Checks if the dimension is numerically greater than the match
-      -- expression.
-    | SDFONumericBetween
-      -- ^ @NUMERIC_BETWEEN@
-      -- Checks if the dimension is numerically between the minimum and maximum
-      -- of the match expression, boundaries excluded.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable SegmentDimensionFilterOperator
-
-instance FromHttpApiData SegmentDimensionFilterOperator where
-    parseQueryParam = \case
-        "OPERATOR_UNSPECIFIED" -> Right SDFOOperatorUnspecified
-        "REGEXP" -> Right SDFORegexp
-        "BEGINS_WITH" -> Right SDFOBeginsWith
-        "ENDS_WITH" -> Right SDFOEndsWith
-        "PARTIAL" -> Right SDFOPartial
-        "EXACT" -> Right SDFOExact
-        "IN_LIST" -> Right SDFOInList
-        "NUMERIC_LESS_THAN" -> Right SDFONumericLessThan
-        "NUMERIC_GREATER_THAN" -> Right SDFONumericGreaterThan
-        "NUMERIC_BETWEEN" -> Right SDFONumericBetween
-        x -> Left ("Unable to parse SegmentDimensionFilterOperator from: " <> x)
-
-instance ToHttpApiData SegmentDimensionFilterOperator where
-    toQueryParam = \case
-        SDFOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"
-        SDFORegexp -> "REGEXP"
-        SDFOBeginsWith -> "BEGINS_WITH"
-        SDFOEndsWith -> "ENDS_WITH"
-        SDFOPartial -> "PARTIAL"
-        SDFOExact -> "EXACT"
-        SDFOInList -> "IN_LIST"
-        SDFONumericLessThan -> "NUMERIC_LESS_THAN"
-        SDFONumericGreaterThan -> "NUMERIC_GREATER_THAN"
-        SDFONumericBetween -> "NUMERIC_BETWEEN"
-
-instance FromJSON SegmentDimensionFilterOperator where
-    parseJSON = parseJSONText "SegmentDimensionFilterOperator"
-
-instance ToJSON SegmentDimensionFilterOperator where
-    toJSON = toJSONText
-
--- | The operator for combining multiple metric filters. If unspecified, it
--- is treated as an \`OR\`.
-data MetricFilterClauseOperator
-    = MFCOOperatorUnspecified
-      -- ^ @OPERATOR_UNSPECIFIED@
-      -- Unspecified operator. It is treated as an \`OR\`.
-    | MFCOOR
-      -- ^ @OR@
-      -- The logical \`OR\` operator.
-    | MFCOAnd
-      -- ^ @AND@
-      -- The logical \`AND\` operator.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable MetricFilterClauseOperator
-
-instance FromHttpApiData MetricFilterClauseOperator where
-    parseQueryParam = \case
-        "OPERATOR_UNSPECIFIED" -> Right MFCOOperatorUnspecified
-        "OR" -> Right MFCOOR
-        "AND" -> Right MFCOAnd
-        x -> Left ("Unable to parse MetricFilterClauseOperator from: " <> x)
-
-instance ToHttpApiData MetricFilterClauseOperator where
-    toQueryParam = \case
-        MFCOOperatorUnspecified -> "OPERATOR_UNSPECIFIED"
-        MFCOOR -> "OR"
-        MFCOAnd -> "AND"
-
-instance FromJSON MetricFilterClauseOperator where
-    parseJSON = parseJSONText "MetricFilterClauseOperator"
-
-instance ToJSON MetricFilterClauseOperator where
-    toJSON = toJSONText
-
--- | Type of the user in the request. The field \`userId\` is associated with
--- this type.
-data UserType
-    = UserIdTypeUnspecified
-      -- ^ @USER_ID_TYPE_UNSPECIFIED@
-      -- When the User Id Type is not specified, the default type used will be
-      -- CLIENT_ID.
-    | UserIdTypeUserId
-      -- ^ @USER_ID_TYPE_USER_ID@
-      -- A single user, like a signed-in user account, that may interact with
-      -- content across one or more devices and \/ or browser instances.
-    | UserIdTypeClientId
-      -- ^ @USER_ID_TYPE_CLIENT_ID@
-      -- Analytics assigned client_id.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable UserType
-
-instance FromHttpApiData UserType where
-    parseQueryParam = \case
-        "USER_ID_TYPE_UNSPECIFIED" -> Right UserIdTypeUnspecified
-        "USER_ID_TYPE_USER_ID" -> Right UserIdTypeUserId
-        "USER_ID_TYPE_CLIENT_ID" -> Right UserIdTypeClientId
-        x -> Left ("Unable to parse UserType from: " <> x)
-
-instance ToHttpApiData UserType where
-    toQueryParam = \case
-        UserIdTypeUnspecified -> "USER_ID_TYPE_UNSPECIFIED"
-        UserIdTypeUserId -> "USER_ID_TYPE_USER_ID"
-        UserIdTypeClientId -> "USER_ID_TYPE_CLIENT_ID"
-
-instance FromJSON UserType where
-    parseJSON = parseJSONText "UserType"
-
-instance ToJSON UserType where
-    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/AnalyticsReporting/Reports/BatchGet.hs b/gen/Network/Google/Resource/AnalyticsReporting/Reports/BatchGet.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/AnalyticsReporting/Reports/BatchGet.hs
+++ /dev/null
@@ -1,152 +0,0 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE FlexibleInstances  #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-{-# LANGUAGE TypeOperators      #-}
-
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-
--- |
--- Module      : Network.Google.Resource.AnalyticsReporting.Reports.BatchGet
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns the Analytics data.
---
--- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference> for @analyticsreporting.reports.batchGet@.
-module Network.Google.Resource.AnalyticsReporting.Reports.BatchGet
-    (
-    -- * REST Resource
-      ReportsBatchGetResource
-
-    -- * Creating a Request
-    , reportsBatchGet
-    , ReportsBatchGet
-
-    -- * Request Lenses
-    , rbgXgafv
-    , rbgUploadProtocol
-    , rbgAccessToken
-    , rbgUploadType
-    , rbgPayload
-    , rbgCallback
-    ) where
-
-import           Network.Google.AnalyticsReporting.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @analyticsreporting.reports.batchGet@ method which the
--- 'ReportsBatchGet' request conforms to.
-type ReportsBatchGetResource =
-     "v4" :>
-       "reports:batchGet" :>
-         QueryParam "$.xgafv" Xgafv :>
-           QueryParam "upload_protocol" Text :>
-             QueryParam "access_token" Text :>
-               QueryParam "uploadType" Text :>
-                 QueryParam "callback" Text :>
-                   QueryParam "alt" AltJSON :>
-                     ReqBody '[JSON] GetReportsRequest :>
-                       Post '[JSON] GetReportsResponse
-
--- | Returns the Analytics data.
---
--- /See:/ 'reportsBatchGet' smart constructor.
-data ReportsBatchGet =
-  ReportsBatchGet'
-    { _rbgXgafv          :: !(Maybe Xgafv)
-    , _rbgUploadProtocol :: !(Maybe Text)
-    , _rbgAccessToken    :: !(Maybe Text)
-    , _rbgUploadType     :: !(Maybe Text)
-    , _rbgPayload        :: !GetReportsRequest
-    , _rbgCallback       :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReportsBatchGet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rbgXgafv'
---
--- * 'rbgUploadProtocol'
---
--- * 'rbgAccessToken'
---
--- * 'rbgUploadType'
---
--- * 'rbgPayload'
---
--- * 'rbgCallback'
-reportsBatchGet
-    :: GetReportsRequest -- ^ 'rbgPayload'
-    -> ReportsBatchGet
-reportsBatchGet pRbgPayload_ =
-  ReportsBatchGet'
-    { _rbgXgafv = Nothing
-    , _rbgUploadProtocol = Nothing
-    , _rbgAccessToken = Nothing
-    , _rbgUploadType = Nothing
-    , _rbgPayload = pRbgPayload_
-    , _rbgCallback = Nothing
-    }
-
-
--- | V1 error format.
-rbgXgafv :: Lens' ReportsBatchGet (Maybe Xgafv)
-rbgXgafv = lens _rbgXgafv (\ s a -> s{_rbgXgafv = a})
-
--- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-rbgUploadProtocol :: Lens' ReportsBatchGet (Maybe Text)
-rbgUploadProtocol
-  = lens _rbgUploadProtocol
-      (\ s a -> s{_rbgUploadProtocol = a})
-
--- | OAuth access token.
-rbgAccessToken :: Lens' ReportsBatchGet (Maybe Text)
-rbgAccessToken
-  = lens _rbgAccessToken
-      (\ s a -> s{_rbgAccessToken = a})
-
--- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-rbgUploadType :: Lens' ReportsBatchGet (Maybe Text)
-rbgUploadType
-  = lens _rbgUploadType
-      (\ s a -> s{_rbgUploadType = a})
-
--- | Multipart request metadata.
-rbgPayload :: Lens' ReportsBatchGet GetReportsRequest
-rbgPayload
-  = lens _rbgPayload (\ s a -> s{_rbgPayload = a})
-
--- | JSONP
-rbgCallback :: Lens' ReportsBatchGet (Maybe Text)
-rbgCallback
-  = lens _rbgCallback (\ s a -> s{_rbgCallback = a})
-
-instance GoogleRequest ReportsBatchGet where
-        type Rs ReportsBatchGet = GetReportsResponse
-        type Scopes ReportsBatchGet =
-             '["https://www.googleapis.com/auth/analytics",
-               "https://www.googleapis.com/auth/analytics.readonly"]
-        requestClient ReportsBatchGet'{..}
-          = go _rbgXgafv _rbgUploadProtocol _rbgAccessToken
-              _rbgUploadType
-              _rbgCallback
-              (Just AltJSON)
-              _rbgPayload
-              analyticsReportingService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy ReportsBatchGetResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/AnalyticsReporting/UserActivity/Search.hs b/gen/Network/Google/Resource/AnalyticsReporting/UserActivity/Search.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/AnalyticsReporting/UserActivity/Search.hs
+++ /dev/null
@@ -1,153 +0,0 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE FlexibleInstances  #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-{-# LANGUAGE TypeOperators      #-}
-
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-
--- |
--- Module      : Network.Google.Resource.AnalyticsReporting.UserActivity.Search
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns User Activity data.
---
--- /See:/ <https://developers.google.com/analytics/devguides/reporting/core/v4/ Analytics Reporting API Reference> for @analyticsreporting.userActivity.search@.
-module Network.Google.Resource.AnalyticsReporting.UserActivity.Search
-    (
-    -- * REST Resource
-      UserActivitySearchResource
-
-    -- * Creating a Request
-    , userActivitySearch
-    , UserActivitySearch
-
-    -- * Request Lenses
-    , uasXgafv
-    , uasUploadProtocol
-    , uasAccessToken
-    , uasUploadType
-    , uasPayload
-    , uasCallback
-    ) where
-
-import           Network.Google.AnalyticsReporting.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @analyticsreporting.userActivity.search@ method which the
--- 'UserActivitySearch' request conforms to.
-type UserActivitySearchResource =
-     "v4" :>
-       "userActivity:search" :>
-         QueryParam "$.xgafv" Xgafv :>
-           QueryParam "upload_protocol" Text :>
-             QueryParam "access_token" Text :>
-               QueryParam "uploadType" Text :>
-                 QueryParam "callback" Text :>
-                   QueryParam "alt" AltJSON :>
-                     ReqBody '[JSON] SearchUserActivityRequest :>
-                       Post '[JSON] SearchUserActivityResponse
-
--- | Returns User Activity data.
---
--- /See:/ 'userActivitySearch' smart constructor.
-data UserActivitySearch =
-  UserActivitySearch'
-    { _uasXgafv          :: !(Maybe Xgafv)
-    , _uasUploadProtocol :: !(Maybe Text)
-    , _uasAccessToken    :: !(Maybe Text)
-    , _uasUploadType     :: !(Maybe Text)
-    , _uasPayload        :: !SearchUserActivityRequest
-    , _uasCallback       :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UserActivitySearch' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uasXgafv'
---
--- * 'uasUploadProtocol'
---
--- * 'uasAccessToken'
---
--- * 'uasUploadType'
---
--- * 'uasPayload'
---
--- * 'uasCallback'
-userActivitySearch
-    :: SearchUserActivityRequest -- ^ 'uasPayload'
-    -> UserActivitySearch
-userActivitySearch pUasPayload_ =
-  UserActivitySearch'
-    { _uasXgafv = Nothing
-    , _uasUploadProtocol = Nothing
-    , _uasAccessToken = Nothing
-    , _uasUploadType = Nothing
-    , _uasPayload = pUasPayload_
-    , _uasCallback = Nothing
-    }
-
-
--- | V1 error format.
-uasXgafv :: Lens' UserActivitySearch (Maybe Xgafv)
-uasXgafv = lens _uasXgafv (\ s a -> s{_uasXgafv = a})
-
--- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-uasUploadProtocol :: Lens' UserActivitySearch (Maybe Text)
-uasUploadProtocol
-  = lens _uasUploadProtocol
-      (\ s a -> s{_uasUploadProtocol = a})
-
--- | OAuth access token.
-uasAccessToken :: Lens' UserActivitySearch (Maybe Text)
-uasAccessToken
-  = lens _uasAccessToken
-      (\ s a -> s{_uasAccessToken = a})
-
--- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-uasUploadType :: Lens' UserActivitySearch (Maybe Text)
-uasUploadType
-  = lens _uasUploadType
-      (\ s a -> s{_uasUploadType = a})
-
--- | Multipart request metadata.
-uasPayload :: Lens' UserActivitySearch SearchUserActivityRequest
-uasPayload
-  = lens _uasPayload (\ s a -> s{_uasPayload = a})
-
--- | JSONP
-uasCallback :: Lens' UserActivitySearch (Maybe Text)
-uasCallback
-  = lens _uasCallback (\ s a -> s{_uasCallback = a})
-
-instance GoogleRequest UserActivitySearch where
-        type Rs UserActivitySearch =
-             SearchUserActivityResponse
-        type Scopes UserActivitySearch =
-             '["https://www.googleapis.com/auth/analytics",
-               "https://www.googleapis.com/auth/analytics.readonly"]
-        requestClient UserActivitySearch'{..}
-          = go _uasXgafv _uasUploadProtocol _uasAccessToken
-              _uasUploadType
-              _uasCallback
-              (Just AltJSON)
-              _uasPayload
-              analyticsReportingService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy UserActivitySearchResource)
-                      mempty
diff --git a/gogol-analyticsreporting.cabal b/gogol-analyticsreporting.cabal
--- a/gogol-analyticsreporting.cabal
+++ b/gogol-analyticsreporting.cabal
@@ -1,47 +1,62 @@
-name:                  gogol-analyticsreporting
-version:               0.5.0
-synopsis:              Google Analytics Reporting SDK.
-homepage:              https://github.com/brendanhay/gogol
-bug-reports:           https://github.com/brendanhay/gogol/issues
-license:               OtherLicense
-license-file:          LICENSE
-author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2015-2016 Brendan Hay
-category:              Network, Google, Cloud
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md src/.gitkeep
+cabal-version:      2.2
+name:               gogol-analyticsreporting
+version:            1.0.0
+synopsis:           Google Analytics Reporting SDK.
+homepage:           https://github.com/brendanhay/gogol
+bug-reports:        https://github.com/brendanhay/gogol/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+gogol@gmail.com>, Toni Cebrián <toni@tonicebrian.com>
 
+copyright:          Copyright (c) 2015-2025 Brendan Hay
+category:           Google
+build-type:         Simple
+extra-source-files:
+  README.md
+  src/.gitkeep
+
 description:
-    Accesses Analytics report data.
-    .
-    /Warning:/ This is an experimental prototype/preview release which is still
-    under exploratory development and not intended for public use, caveat emptor!
-    .
-    This library is compatible with version @v4@
-    of the API.
+  Accesses Analytics report data.
+  .
+  /Warning:/ This is an experimental prototype/preview release which is still
+  under exploratory development and not intended for public use, caveat emptor!
+  .
+  This library is compatible with version @v4@
+  of the API.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/gogol.git
+  type:     git
+  location: git://github.com/brendanhay/gogol.git
+  subdir:   gogol-analyticsreporting
 
+flag field-selectors
+  description:
+    If record field selectors should be enabled. Disabling this requires GHC >=9.2 and the NoFieldSelectors extension.
+
+  default:     False
+  manual:      True
+
 library
-    default-language:  Haskell2010
-    hs-source-dirs:    src gen
+  default-language: GHC2021
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+    -fwarn-unused-packages
 
-    ghc-options:       -Wall
+  if (!flag(field-selectors) && impl(ghc >=9.2))
+    default-extensions: NoFieldSelectors
 
-    exposed-modules:
-          Network.Google.AnalyticsReporting
-        , Network.Google.AnalyticsReporting.Types
-        , Network.Google.Resource.AnalyticsReporting.Reports.BatchGet
-        , Network.Google.Resource.AnalyticsReporting.UserActivity.Search
+  exposed-modules:
+    Gogol.AnalyticsReporting
+    Gogol.AnalyticsReporting.Reports.BatchGet
+    Gogol.AnalyticsReporting.Types
+    Gogol.AnalyticsReporting.UserActivity.Search
 
-    other-modules:
-          Network.Google.AnalyticsReporting.Types.Product
-        , Network.Google.AnalyticsReporting.Types.Sum
+  other-modules:
+    Gogol.AnalyticsReporting.Internal.Product
+    Gogol.AnalyticsReporting.Internal.Sum
 
-    build-depends:
-          gogol-core == 0.5.0.*
-        , base       >= 4.7 && < 5
+  build-depends:    gogol-core ^>=1.0.0
