diff --git a/OpenTelemetry.sln b/OpenTelemetry.sln
index 1880cbb93c5..8f65b460436 100644
--- a/OpenTelemetry.sln
+++ b/OpenTelemetry.sln
@@ -251,6 +251,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "getting-started-jaeger", "d
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "stratified-sampling-example", "docs\trace\advanced\stratified-sampling-example\stratified-sampling-example.csproj", "{9C99621C-343E-479C-A943-332DB6129B71}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Exporter.OpenTelemetryProtocol.Http", "src\OpenTelemetry.Exporter.OpenTelemetryProtocol.Http\OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.csproj", "{877F8535-7851-4DC8-984A-461B097DE154}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests", "test\OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests\OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests.csproj", "{FA9B9576-1158-40A8-9CF3-8878CBDA873A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests", "test\OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests\OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests.csproj", "{BBCF30A4-D470-4C25-AA03-D151C551225D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -529,6 +535,18 @@ Global
{9C99621C-343E-479C-A943-332DB6129B71}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C99621C-343E-479C-A943-332DB6129B71}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C99621C-343E-479C-A943-332DB6129B71}.Release|Any CPU.Build.0 = Release|Any CPU
+ {877F8535-7851-4DC8-984A-461B097DE154}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {877F8535-7851-4DC8-984A-461B097DE154}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {877F8535-7851-4DC8-984A-461B097DE154}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {877F8535-7851-4DC8-984A-461B097DE154}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FA9B9576-1158-40A8-9CF3-8878CBDA873A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FA9B9576-1158-40A8-9CF3-8878CBDA873A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FA9B9576-1158-40A8-9CF3-8878CBDA873A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FA9B9576-1158-40A8-9CF3-8878CBDA873A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BBCF30A4-D470-4C25-AA03-D151C551225D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BBCF30A4-D470-4C25-AA03-D151C551225D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BBCF30A4-D470-4C25-AA03-D151C551225D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BBCF30A4-D470-4C25-AA03-D151C551225D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc/CHANGELOG.md
new file mode 100644
index 00000000000..134621e04d9
--- /dev/null
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Changelog
+
+## Unreleased
+
+* Initial release
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc/README.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc/README.md
index f26f22a5dae..13e8ed135b1 100644
--- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc/README.md
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc/README.md
@@ -13,7 +13,7 @@ implementation.
## Installation
```shell
-dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc
+dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc --prerelease
```
## Configuration
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/.publicApi/netstandard2.0/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/.publicApi/netstandard2.0/PublicAPI.Shipped.txt
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/.publicApi/netstandard2.0/PublicAPI.Unshipped.txt
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/CHANGELOG.md
new file mode 100644
index 00000000000..134621e04d9
--- /dev/null
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Changelog
+
+## Unreleased
+
+* Initial release
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.csproj
new file mode 100644
index 00000000000..513eea610ed
--- /dev/null
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netstandard2.0
+ OpenTelemetry protocol exporter over gRPC for OpenTelemetry .NET
+ $(PackageTags);OTLP;HTTP
+ core-
+
+
+
+
+ false
+
+
+
+
+
+
+
diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/README.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/README.md
new file mode 100644
index 00000000000..a5fdc790d08
--- /dev/null
+++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http/README.md
@@ -0,0 +1,71 @@
+# gRPC-based implementation of OTLP Exporter for OpenTelemetry .NET
+
+[](https://www.nuget.org/packages/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http)
+[](https://www.nuget.org/packages/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http)
+
+[HTTP-based implementation of OTLP Exporter](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md)
+implementation.
+
+## Prerequisite
+
+* [Get OpenTelemetry Collector](https://opentelemetry.io/docs/collector/)
+
+## Installation
+
+```shell
+dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol.Http --prerelease
+```
+
+## Configuration
+
+You can configure the `OtlpExporter` through `Options` types properties
+and environment variables.
+The `Options` type setters take precedence over the environment variables.
+
+## Options Properties
+
+* `BatchExportProcessorOptions`: Configuration options for the batch exporter.
+ Only used if ExportProcessorType is set to Batch.
+
+* `Endpoint`: Target to which the exporter is going to send traces or metrics.
+ The endpoint must be a valid Uri with scheme (http or https) and host, and MAY
+ contain a port and path.
+
+* `ExportProcessorType`: Whether the exporter should use [Batch or Simple
+ exporting
+ processor](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk.md#built-in-span-processors).
+
+* `Headers`: Optional headers for the connection.
+
+* `TimeoutMilliseconds` : Max waiting time for the backend to process a batch.
+
+See the [`TestOtlpExporter.cs`](../../examples/Console/TestOtlpExporter.cs) for
+an example of how to use the exporter.
+
+## Environment Variables
+
+The following environment variables can be used to override the default
+values of the `OtlpExporterOptions`
+(following the [OpenTelemetry specification](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md)).
+
+| Environment variable | `OtlpExporterOptions` property |
+| ------------------------------| --------------------------------------|
+| `OTEL_EXPORTER_OTLP_ENDPOINT` | `Endpoint` |
+| `OTEL_EXPORTER_OTLP_HEADERS` | `Headers` |
+| `OTEL_EXPORTER_OTLP_TIMEOUT` | `TimeoutMilliseconds` |
+
+The following environment variables can be used to override the default
+values of the `PeriodicExportingMetricReaderOptions`
+(following the [OpenTelemetry specification](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.12.0/specification/sdk-environment-variables.md#periodic-exporting-metricreader).
+
+| Environment variable | `PeriodicExportingMetricReaderOptions` property |
+| ------------------------------| ------------------------------------------------|
+| `OTEL_METRIC_EXPORT_INTERVAL` | `ExportIntervalMilliseconds` |
+| `OTEL_METRIC_EXPORT_TIMEOUT` | `ExportTimeoutMilliseconds` |
+
+## References
+
+* [OpenTelemetry
+ Collector](https://github.com/open-telemetry/opentelemetry-collector)
+* [OpenTelemetry Project](https://opentelemetry.io/)
+* [OTLP proto files](https://github.com/open-telemetry/opentelemetry-proto)
diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests.csproj b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests.csproj
new file mode 100644
index 00000000000..49964123efe
--- /dev/null
+++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Grpc.Tests.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+ net7.0;net6.0
+ $(TargetFrameworks);net462
+ $(TARGET_FRAMEWORK)
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests.csproj b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests.csproj
new file mode 100644
index 00000000000..580937916d7
--- /dev/null
+++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Http.Tests.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+ net7.0;net6.0
+ $(TargetFrameworks);net462
+ $(TARGET_FRAMEWORK)
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+