diff --git a/x-pack/plugins/apm/public/components/app/ErrorGroupDetails/Distribution/index.tsx b/x-pack/plugins/apm/public/components/app/ErrorGroupDetails/Distribution/index.tsx
new file mode 100644
index 0000000000000..ecdd52e31730c
--- /dev/null
+++ b/x-pack/plugins/apm/public/components/app/ErrorGroupDetails/Distribution/index.tsx
@@ -0,0 +1,129 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+
+import { EuiTitle } from '@elastic/eui';
+import theme from '@elastic/eui/dist/eui_theme_light.json';
+import numeral from '@elastic/numeral';
+import { i18n } from '@kbn/i18n';
+import d3 from 'd3';
+import { scaleUtc } from 'd3-scale';
+import { mean } from 'lodash';
+import React from 'react';
+import { asRelativeDateTimeRange } from '../../../../utils/formatters';
+import { getTimezoneOffsetInMs } from '../../../shared/charts/CustomPlot/getTimezoneOffsetInMs';
+// @ts-ignore
+import Histogram from '../../../shared/charts/Histogram';
+import { EmptyMessage } from '../../../shared/EmptyMessage';
+
+interface IBucket {
+ key: number;
+ count: number | undefined;
+}
+
+// TODO: cleanup duplication of this in distribution/get_distribution.ts (ErrorDistributionAPIResponse) and transactions/distribution/index.ts (TransactionDistributionAPIResponse)
+interface IDistribution {
+ noHits: boolean;
+ buckets: IBucket[];
+ bucketSize: number;
+}
+
+interface FormattedBucket {
+ x0: number;
+ x: number;
+ y: number | undefined;
+}
+
+export function getFormattedBuckets(
+ buckets: IBucket[],
+ bucketSize: number
+): FormattedBucket[] | null {
+ if (!buckets) {
+ return null;
+ }
+
+ return buckets.map(({ count, key }) => {
+ return {
+ x0: key,
+ x: key + bucketSize,
+ y: count,
+ };
+ });
+}
+
+interface Props {
+ distribution: IDistribution;
+ title: React.ReactNode;
+}
+
+const tooltipHeader = (bucket: FormattedBucket) =>
+ asRelativeDateTimeRange(bucket.x0, bucket.x);
+
+export function ErrorDistribution({ distribution, title }: Props) {
+ const buckets = getFormattedBuckets(
+ distribution.buckets,
+ distribution.bucketSize
+ );
+
+ if (!buckets) {
+ return (
+