diff --git a/public/images/google-forms.png b/public/images/google-forms.png
new file mode 100644
index 000000000..512422e00
Binary files /dev/null and b/public/images/google-forms.png differ
diff --git a/shared/editor/embeds/GoogleForms.test.ts b/shared/editor/embeds/GoogleForms.test.ts
new file mode 100644
index 000000000..24a8a3c0f
--- /dev/null
+++ b/shared/editor/embeds/GoogleForms.test.ts
@@ -0,0 +1,48 @@
+import GoogleForms from "./GoogleForms";
+
+describe("GoogleForms", () => {
+ const match = GoogleForms.ENABLED[0];
+
+ test("to be enabled on long-form share links", () => {
+ expect(
+ "https://docs.google.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform?usp=sf_link".match(
+ match
+ )
+ ).toBeTruthy();
+ expect(
+ "https://docs.google.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform".match(
+ match
+ )
+ ).toBeTruthy();
+ expect(
+ "https://docs.google.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform?embedded=true".match(
+ match
+ )
+ ).toBeTruthy();
+ });
+
+ test("to be enabled on edit links", () => {
+ expect(
+ "https://docs.google.com/forms/d/1zG75dmHQGpomQlWB6VtRhWajNer7mKMjtApM_aRAJV8/edit".match(
+ match
+ )
+ ).toBeTruthy();
+ });
+
+ test("to not be enabled elsewhere", () => {
+ expect("https://docs.google.com/forms".match(match)).toBe(null);
+ expect("https://docs.google.com/forms/d/".match(match)).toBe(null);
+ expect("https://docs.google.com".match(match)).toBe(null);
+ expect("https://www.google.com".match(match)).toBe(null);
+ expect(
+ "https://docssgoogle.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform?usp=sf_link".match(
+ match
+ )
+ ).toBe(null);
+ expect(
+ "https://docs.googleecom/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform".match(
+ match
+ )
+ ).toBe(null);
+ });
+});
diff --git a/shared/editor/embeds/GoogleForms.tsx b/shared/editor/embeds/GoogleForms.tsx
new file mode 100644
index 000000000..9379836ca
--- /dev/null
+++ b/shared/editor/embeds/GoogleForms.tsx
@@ -0,0 +1,33 @@
+import * as React from "react";
+import Frame from "../components/Frame";
+import Image from "../components/Image";
+import { EmbedProps as Props } from ".";
+
+function GoogleForms(props: Props) {
+ return (
+
+ }
+ canonicalUrl={props.attrs.href}
+ title="Google Forms"
+ border
+ />
+ );
+}
+
+GoogleForms.ENABLED = [
+ new RegExp("^https?://docs\\.google\\.com/forms/d/(.+)$"),
+];
+
+export default GoogleForms;
diff --git a/shared/editor/embeds/index.tsx b/shared/editor/embeds/index.tsx
index 329cc1216..e2e1ddc7f 100644
--- a/shared/editor/embeds/index.tsx
+++ b/shared/editor/embeds/index.tsx
@@ -21,6 +21,7 @@ import GoogleDataStudio from "./GoogleDataStudio";
import GoogleDocs from "./GoogleDocs";
import GoogleDrawings from "./GoogleDrawings";
import GoogleDrive from "./GoogleDrive";
+import GoogleForms from "./GoogleForms";
import GoogleSheets from "./GoogleSheets";
import GoogleSlides from "./GoogleSlides";
import InVision from "./InVision";
@@ -233,6 +234,13 @@ const embeds: EmbedDescriptor[] = [
component: GoogleDataStudio,
matcher: matcher(GoogleDataStudio),
},
+ {
+ title: "Google Forms",
+ keywords: "form survey",
+ icon: () =>
,
+ component: GoogleForms,
+ matcher: matcher(GoogleForms),
+ },
{
title: "InVision",
keywords: "design prototype",