diff --git a/examples/camel-example-salesforce-consumer/README.adoc b/examples/camel-example-salesforce-consumer/README.adoc
new file mode 100644
index 0000000..1e2b728
--- /dev/null
+++ b/examples/camel-example-salesforce-consumer/README.adoc
@@ -0,0 +1,64 @@
+== Salesforce Streaming API Example
+
+This example shows how to use Salesforce Streaming API.
+
+=== Configuring Salesforce
+This examples uses OAuth 2.0 Refresh Token Flow, which requires 3 credentials collected from Salesforce - `Client ID`, `Client Secret` and `Refresh Token`. You will need to put your own credentials in `src/main/resources/application.properties` file.
+
+NOTE: you might want to sign up with your own Developer account at developer.salesforce.com. After you have done that, you’ll need to create a Connected Application for your integration.
+
+NOTE: This was written with Salesforce Lightening user interface. Classic user interface might have slightly different menu and/or workflow.
+
+Here is an example workflow of creating a Connected Application and get required credentials. For more details, please check Salesforce online manual
+https://help.salesforce.com/articleView?id=extend_code_overview.htm&type=5
+
+==== Creating a Connected Application
+. Go to `PLATFORM TOOLS > Apps > App Manager` in a navigation tree at the left of Salesforce Setup screen
+. Click `New Connected App` button at the upper right
+. Enter `camelk_knative_source_salesforce` for Connected App Name
+. Enter your email address for Contact Email
+. Check Enable OAuth Settings
+. Enter `https://login.salesforce.com/services/oauth2/success` for Callback URL
+. Choose 2 OAuth scopes, `Access and manage your data (api)` and `Perform requests on your behalf at any time (refresh_token, offline_access)`, then click Add button
+. Click Save button and then click Continue button
+. You will be redirected to `Manage Connected Apps` page. `Consumer Key` and `Consumer Secret` are available in API section. Use `Consumer Key` as a `Client ID` and `Consumer Secret` as a `Client Secret`.
+. Go to `PLATFORM TOOLS > Apps > Connected Apps > Manage Connected Apps`
+. Click `Edit` next to the `camelk_knative_source_salesforce`
+. In OAuth Policies section,
+.. Choose `Relax IP restrictions` for IP Relaxation
+.. Choose `Refresh token is valid until revoked`
+. Click `Save`
+
+==== Getting an OAuth refresh token
+In your browser go to the URL, with substituting the `__YOUR_CLIENT_ID_HERE__` with your connected application Consumer Key:
+
+```
+https://login.salesforce.com/services/oauth2/authorize?response_type=token&client_id=YOUR_CLIENT_ID_HERE&redirect_uri=https://login.salesforce.com/services/oauth2/success&display=touch
+```
+
+Allow access to the application, and you’ll end up on a page with `refresh_token`, something like:
+
+```
+https://login.salesforce.com/services/oauth2/success#access_token=..&refresh_token=<refresh_token>&instance_url=...&issued_at=...&signature=...&scope=...&token_type=Bearer
+```
+
+
+=== How to run
+
+You can run this example using
+
+    mvn compile camel:run
+
+=== Custom topic name and operation flags
+
+You can specify your topic name (`salesforce.topic`) and turn on/off each operation to be notified (for example, set true for `camel.component.salesforce.config.notifyForOperationCreate` to receive Contact created event) in `src/main/resources/application.properties` file.
+
+=== Help and contributions
+
+If you hit any problem using Camel or have some feedback, then please
+https://camel.apache.org/support.html[let us know].
+
+We also love contributors, so
+https://camel.apache.org/contributing.html[get involved] :-)
+
+The Camel riders!
diff --git a/examples/camel-example-salesforce-consumer/pom.xml b/examples/camel-example-salesforce-consumer/pom.xml
new file mode 100644
index 0000000..0d7702f
--- /dev/null
+++ b/examples/camel-example-salesforce-consumer/pom.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel.example</groupId>
+        <artifactId>examples</artifactId>
+        <version>3.5.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-example-salesforce-consumer</artifactId>
+    <name>Camel :: Example :: Salesforce :: Consumer</name>
+    <description>An example that uses Salesforce Rest Streaming API</description>
+    <packaging>jar</packaging>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <category>Social</category>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <!-- Add Camel BOM -->
+            <dependency>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-bom</artifactId>
+                <version>${camel.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-main</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-jackson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-salesforce</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>${slf4j-version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-maven-plugin</artifactId>
+                <version>${camel.version}</version>
+                <configuration>
+                    <logClasspath>false</logClasspath>
+                    <mainClass>org.apache.camel.example.salesforce.Application</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/examples/camel-example-salesforce-consumer/src/main/java/org/apache/camel/example/salesforce/Application.java b/examples/camel-example-salesforce-consumer/src/main/java/org/apache/camel/example/salesforce/Application.java
new file mode 100644
index 0000000..da2d882
--- /dev/null
+++ b/examples/camel-example-salesforce-consumer/src/main/java/org/apache/camel/example/salesforce/Application.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.example.salesforce;
+
+import org.apache.camel.main.Main;
+
+public final class Application {
+
+    private Application() {
+        // noop
+    }
+
+    public static void main(String[] args) throws Exception {
+        Main camelMain = new Main();
+        camelMain.configure().addRoutesBuilder(new SalesforceRouteBuilder());
+        camelMain.run(args);
+    }
+}
diff --git a/examples/camel-example-salesforce-consumer/src/main/java/org/apache/camel/example/salesforce/SalesforceRouteBuilder.java b/examples/camel-example-salesforce-consumer/src/main/java/org/apache/camel/example/salesforce/SalesforceRouteBuilder.java
new file mode 100644
index 0000000..a30e058
--- /dev/null
+++ b/examples/camel-example-salesforce-consumer/src/main/java/org/apache/camel/example/salesforce/SalesforceRouteBuilder.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.example.salesforce;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class SalesforceRouteBuilder extends RouteBuilder {
+
+    @Override
+    public void configure() {
+        from("salesforce:{{salesforce.topic}}")
+        .unmarshal().json()
+        .choice()
+            .when(header("CamelSalesforceEventType").isEqualTo("created"))
+                .log("New Salesforce contact was created: [ID:${body[Id]}, Name:${body[Name]}, Email:${body[Email]}, Phone: ${body[Phone]}]")
+            .when(header("CamelSalesforceEventType").isEqualTo("updated"))
+                .log("A Salesforce contact was updated: [ID:${body[Id]}, Name:${body[Name]}, Email:${body[Email]}, Phone: ${body[Phone]}]")
+            .when(header("CamelSalesforceEventType").isEqualTo("undeleted"))
+                .log("A Salesforce contact was undeleted: [ID:${body[Id]}, Name:${body[Name]}, Email:${body[Email]}, Phone: ${body[Phone]}]")
+            .when(header("CamelSalesforceEventType").isEqualTo("deleted"))
+                .log("A Salesforce contact was deleted: [ID:${body[Id]}]");
+    }
+}
diff --git a/examples/camel-example-salesforce-consumer/src/main/resources/application.properties b/examples/camel-example-salesforce-consumer/src/main/resources/application.properties
new file mode 100644
index 0000000..af883b7
--- /dev/null
+++ b/examples/camel-example-salesforce-consumer/src/main/resources/application.properties
@@ -0,0 +1,32 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+# Salesforce credentials
+camel.component.salesforce.login-config.client-id=<Your Client ID>
+camel.component.salesforce.login-config.client-secret=<Your Client Secret>
+camel.component.salesforce.login-config.refresh-token=<Your Refresh Token>
+# Other configuration
+camel.component.salesforce.config.raw-payload=true
+camel.component.salesforce.login-config.type=REFRESH_TOKEN
+camel.component.salesforce.config.notifyForFields=ALL
+salesforce.topic=camelTestTopic
+camel.component.salesforce.config.updateTopic=true
+camel.component.salesforce.config.notifyForOperationCreate=true
+camel.component.salesforce.config.notifyForOperationUpdate=true
+camel.component.salesforce.config.notifyForOperationDelete=true
+camel.component.salesforce.config.notifyForOperationUndelete=true
+camel.component.salesforce.config.sObjectQuery=SELECT Id, Name, Email, Phone FROM Contact
+
diff --git a/examples/camel-example-salesforce-consumer/src/main/resources/simplelogger.properties b/examples/camel-example-salesforce-consumer/src/main/resources/simplelogger.properties
new file mode 100644
index 0000000..28533a4
--- /dev/null
+++ b/examples/camel-example-salesforce-consumer/src/main/resources/simplelogger.properties
@@ -0,0 +1,2 @@
+org.slf4j.simpleLogger.log.org.apache.camel=info
+
diff --git a/examples/pom.xml b/examples/pom.xml
index d3ec65f..c37d44f 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -146,6 +146,7 @@
         -->
         <module>camel-example-route-throttling</module>
         <module>camel-example-routetemplate</module>
+        <module>camel-example-salesforce-consumer</module>
         <module>camel-example-servlet-rest-blueprint</module>
         <module>camel-example-servlet-tomcat</module>
         <module>camel-example-splunk</module>
