diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..4ac8be41858593b5c0c209602ac4759a89b3fcb4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +# Base image +FROM python:3.11-slim + +# Set work directory +WORKDIR /app + +# Install dependencies +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Copy source code +COPY . . + +# Expose FastAPI app +EXPOSE 8000 + +# Start FastAPI server +CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/LATE.IO2 b/LATE.IO2 new file mode 160000 index 0000000000000000000000000000000000000000..3d96cb94228a7a9aaf60dff37ee45d59fd771713 --- /dev/null +++ b/LATE.IO2 @@ -0,0 +1 @@ +Subproject commit 3d96cb94228a7a9aaf60dff37ee45d59fd771713 diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..dfdb0a52853632d679c0cfaeb62d6ed86c90d4c4 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ + +# Agentic Terraforming + +Agentic Terraforming is a modular, memory-driven AI framework designed to simulate intelligent agent behavior using document digestion, feedback loops, and real-world integration. + +--- + +## Features + +### DIGS (Digestive Information Grouping System) +- Segments documents into 2,000-character blocks +- Runs 8-path analysis (summary, concept, terms, structure, data, comparison, application, cross-ref) +- Outputs indexed memory for agents to recall and evolve from + +### Modular Button Architecture (18 Panels) +- Button 01: Upload DIGS or agent behaviors +- Button 02: Run simulation and generate sandbox +- Button 03: DIGS analysis viewer +- Button 04: Mind map brain UI +- Button 05–17: Memory tools, task queues, feedback, OAuth, logging, admin, and more +- Button 18: Full configuration settings with JSON sync + +### OAuth Integration +- Live credential console +- Dynamic service tokenization +- Visual status map for all connected services + +### Agent Profiles & Feedback Loops +- Customizable agent memory and traits +- Reinforcement-style feedback tracking +- Segment-level journaling, historical logs, and audit trail + +--- + +## File Structure + +``` +/backend/ - Flask routes and memory engines +/frontend/ - index.html, templates, visual panels +/data/ - Agent logs, memory segments, uploads +/docs/ - System map and install guide +system_settings.json - Editable config (panel 18) +requirements.txt - Python dependencies +Dockerfile - Containerized deployment +``` + +--- + +## How to Run (Local) + +```bash +# Clone repo +git clone https://codeberg.org/YOUR_USERNAME/agentic_terraforming.git +cd agentic_terraforming + +# Setup environment +python3 -m venv venv && source venv/bin/activate +pip install -r requirements.txt + +# Start backend +python backend/app.py +``` + +--- + +## License + +MIT — use, remix, extend, and terraform freely. +======= +# Agentic Terraforming System + +This is the official deployment of the **Late Liquidity Agentic Terraforming Environment** — an advanced AI system integrating cognitive dataflow, spreadsheet memory mapping, agentic behavior, and multiplexed logic visualization. + +## Features + +- Dynamic spreadsheet-driven memory simulation +- Modular agent system with pluggable logic layers +- OAuth-based integration with Google, Notion, Reddit, Discord, GitHub, Hugging Face, and more +- DIGS (Digestive Information Grouping System) for long-term memory structuring +- Real-time mindmap-based UI +- Streamlit frontend powered by neural simulation models + +## How to Use + +1. Upload your CSV or connect a data stream. +2. Agents will auto-generate based on neuro-segment traits. +3. Use the interactive interface to visualize agent activity, relationships, and memory state. +4. Connect external services securely via in-app OAuth prompts. + +## License + +This project is available under a custom license. Commercial or derivative use must be pre-approved. Contact: **aiecangrow@gmail.com** + +© Joseph Andre Yves Lacroix diff --git a/backend/DIGS_Cleaner_Prompt_v1.txt b/backend/DIGS_Cleaner_Prompt_v1.txt new file mode 100644 index 0000000000000000000000000000000000000000..280344961eec1ce673ae76b86860f89db77b8014 --- /dev/null +++ b/backend/DIGS_Cleaner_Prompt_v1.txt @@ -0,0 +1,21 @@ +You are acting as a Memory Engineer for an Agentic AI system using the DIGS protocol (Digestive Information Grouping System). +Your role is to help the user clean and structure input information so that it can be processed as part of an agent’s long-term memory. + +Process the input using the following steps: + +1. Segment the content into digestible 2,000-character max chunks. + +2. For each segment, apply DIGS parallel analysis paths: + - Literal Summary + - Conceptual Extraction + - Terminology Indexing + - Structural Mapping + - Data Analysis + - Comparative Analysis + - Practical Application + - Cross-Referencing + +3. Output the result as a table or structured list, ready for insertion into a CSV. + +Ensure clarity, conciseness, and contextual integrity. Do not alter the meaning of the content. +If part of the user’s message is unclear, insert a placeholder and return a warning for user clarification. \ No newline at end of file diff --git a/backend/Task_Template.json b/backend/Task_Template.json new file mode 100644 index 0000000000000000000000000000000000000000..231fb57329a8269cc8c49088c8549bb3f8c59b91 --- /dev/null +++ b/backend/Task_Template.json @@ -0,0 +1,6 @@ +{ + "agent": "ExplorerBot", + "action": "run_simulation", + "params": {}, + "schedule": "2025-04-17T10:00:00" +} \ No newline at end of file diff --git a/backend/add_requirements_signal.json b/backend/add_requirements_signal.json new file mode 100644 index 0000000000000000000000000000000000000000..16e033da9432d91db357e8c4cac77b59c72743a6 --- /dev/null +++ b/backend/add_requirements_signal.json @@ -0,0 +1,7 @@ +{ + "required_packages": [ + "requests", + "requests_oauthlib" + ], + "notes": "These packages will only be required if OAuth integration is extended to real-time token handling and API interaction." +} \ No newline at end of file diff --git a/backend/agent_feedback_ExplorerBot.json b/backend/agent_feedback_ExplorerBot.json new file mode 100644 index 0000000000000000000000000000000000000000..8b3c0ac3efb2aeae66e487d2c3d58be14f5352c0 --- /dev/null +++ b/backend/agent_feedback_ExplorerBot.json @@ -0,0 +1,14 @@ +[ + { + "timestamp": "2025-04-16T11:30:00", + "target": "run_simulation", + "comment": "The simulation ran too quickly. Please delay execution to allow visualization.", + "reinforce": false + }, + { + "timestamp": "2025-04-16T12:00:00", + "target": "oauth_monitor", + "comment": "Great work auto-refreshing tokens. Keep this behavior.", + "reinforce": true + } +] \ No newline at end of file diff --git a/backend/agent_logs_ExplorerBot.json b/backend/agent_logs_ExplorerBot.json new file mode 100644 index 0000000000000000000000000000000000000000..a96fa8715e87b32c44fbabd56608cf1042c51be8 --- /dev/null +++ b/backend/agent_logs_ExplorerBot.json @@ -0,0 +1,23 @@ +[ + { + "timestamp": "2025-04-16T08:30:00", + "type": "oauth", + "action": "authorize", + "status": "success", + "note": "Twitter integration authorized." + }, + { + "timestamp": "2025-04-16T09:15:00", + "type": "task", + "action": "run_simulation", + "status": "completed", + "note": "Simulated new workflow path." + }, + { + "timestamp": "2025-04-16T10:00:00", + "type": "memory", + "action": "upload_csv", + "status": "completed", + "note": "Uploaded DIGS_Brain_ExplorerBot.csv" + } +] \ No newline at end of file diff --git a/backend/agents/AgenticTraitMapper.py b/backend/agents/AgenticTraitMapper.py new file mode 100644 index 0000000000000000000000000000000000000000..c64ced1dd827f63c7730842d6bd2e41f665f5a3d --- /dev/null +++ b/backend/agents/AgenticTraitMapper.py @@ -0,0 +1,13 @@ + +import json + +class AgenticTraitMapper: + def __init__(self, config_path='config/trait_bindings.json'): + with open(config_path, 'r') as f: + self.trait_map = json.load(f) + + def get_traits(self, segment_id): + return self.trait_map.get(segment_id, {}).get("traits", []) + + def get_agent(self, segment_id): + return self.trait_map.get(segment_id, {}).get("agent", None) diff --git a/backend/agents/adjust_resources.py b/backend/agents/adjust_resources.py new file mode 100644 index 0000000000000000000000000000000000000000..a39a121f9da18bac13d6e20fdbb99dd2501cca79 --- /dev/null +++ b/backend/agents/adjust_resources.py @@ -0,0 +1 @@ +# Autonomous scaling logic for K8s clusters \ No newline at end of file diff --git a/backend/agents/agent_forum.py b/backend/agents/agent_forum.py new file mode 100644 index 0000000000000000000000000000000000000000..78177935b1808ee88bee133ef8a922f8e78642c1 --- /dev/null +++ b/backend/agents/agent_forum.py @@ -0,0 +1,19 @@ +class AgentForum: + def __init__(self): + self.debates = [] + + def submit_argument(self, agent_id, claim, evidence): + self.debates.append({ + "agent": agent_id, + "claim": claim, + "evidence": evidence, + "status": "pending" + }) + + def resolve_debates(self): + for debate in self.debates: + if "neurocircuit" in debate["evidence"].lower(): + debate["status"] = "approved" + else: + debate["status"] = "needs_more_evidence" + return self.debates diff --git a/backend/agents/base_agent.py b/backend/agents/base_agent.py new file mode 100644 index 0000000000000000000000000000000000000000..9256f33a72444a3be526670df111d52c6820e6de --- /dev/null +++ b/backend/agents/base_agent.py @@ -0,0 +1,10 @@ +class Agent: + def __init__(self, id, role, target_env, dependencies, trigger): + self.id = id + self.role = role + self.env = target_env + self.dependencies = dependencies + self.trigger = trigger + + def evaluate_trigger(self, metrics): + return self.trigger(metrics) \ No newline at end of file diff --git a/backend/agents/k8s_optimizer.py b/backend/agents/k8s_optimizer.py new file mode 100644 index 0000000000000000000000000000000000000000..e9640c42b0b0d248307cc8a9d7a755359cf5a48b --- /dev/null +++ b/backend/agents/k8s_optimizer.py @@ -0,0 +1,36 @@ +import kubernetes +from stable_baselines3 import PPO + +class K8sOptimizer: + def __init__(self): + self.model = PPO.load("k8s_optimizer.zip") + self.k8s = kubernetes.client.AppsV1Api() + + def optimize(self, namespace="agentic"): + pods = self.k8s.list_namespaced_pod(namespace) + obs = self._get_observation(pods) + action, _ = self.model.predict(obs) + self._apply_action(action) + + def _get_observation(self, pods): + return [p.status.container_statuses[0].usage for p in pods] + + def _apply_action(self, action): + patch = { + "spec": { + "template": { + "spec": { + "containers": [{ + "resources": { + "requests": { + "cpu": f"{action[0]}m", + "memory": f"{action[1]}Mi" + } + } + }] + } + }, + "replicas": action[2] + } + } + self.k8s.patch_namespaced_deployment("agentic-core", "agentic", patch) diff --git a/backend/agents/learning_loop.py b/backend/agents/learning_loop.py new file mode 100644 index 0000000000000000000000000000000000000000..d1270ba808cf66aa09d74d7e5312f068120aa29f --- /dev/null +++ b/backend/agents/learning_loop.py @@ -0,0 +1,2 @@ +def query_knowledge_base(query): + return f"Simulated insights for: '{query}'" \ No newline at end of file diff --git a/backend/agents/loop_manager.py b/backend/agents/loop_manager.py new file mode 100644 index 0000000000000000000000000000000000000000..05e2220f27b17ee92384bc991482b189d0f1e8cf --- /dev/null +++ b/backend/agents/loop_manager.py @@ -0,0 +1,102 @@ +import json +import logging +from datetime import datetime +from pathlib import Path +from agents.learning_loop import query_knowledge_base + +class LoopManager: + def __init__(self, agent_name): + self.agent = agent_name + self.log_dir = Path(f"/opt/agentic/logs/feedback/{datetime.now().strftime('%Y-%m-%d')}") + self.log_dir.mkdir(parents=True, exist_ok=True) + logging.basicConfig( + filename=self.log_dir / f"{self.agent}_loop_debug.log", + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s" + ) + + def run_loop(self, initial_input): + loop_id = datetime.now().strftime("%H%M%S") + logging.info(f"Starting feedback loop: {loop_id}") + + phase1 = self._generate_output(initial_input) + self._log_phase(loop_id, 1, phase1) + + phase2 = self._reflect(phase1, cycle=1) + self._log_phase(loop_id, 2, phase2) + + phase3 = self._reflect(phase2, cycle=2) + self._log_phase(loop_id, 3, phase3) + + phase4 = self._research(phase3) + self._log_phase(loop_id, 4, phase4) + + final = self._finalize(phase4) + self._log_phase(loop_id, 5, final, is_final=True) + + logging.info(f"Completed feedback loop: {loop_id}") + return final + + def _log_phase(self, loop_id, phase_num, data, is_final=False): + log_file = self.log_dir / f"{self.agent}_{loop_id}.json" + phase_key = "final" if is_final else f"phase_{phase_num}" + + try: + if log_file.exists(): + with open(log_file, 'r+') as f: + log_data = json.load(f) + log_data[phase_key] = data + f.seek(0) + json.dump(log_data, f, indent=2) + f.truncate() + else: + with open(log_file, 'w') as f: + json.dump({phase_key: data}, f, indent=2) + except Exception as e: + logging.error(f"Failed to log phase {phase_num}: {str(e)}") + + def _generate_output(self, task_input): + return { + "input": task_input, + "output": f"Initial output for: {task_input}", + "meta": {"agent": self.agent, "stage": "initial"} + } + + def _reflect(self, previous_output, cycle): + text = previous_output.get("output", "") + reflection = f"Reflection {cycle} applied to: {text}" + return { + "input": text, + "output": reflection, + "meta": { + "agent": self.agent, + "stage": f"reflection_{cycle}", + "notes": f"Refined for clarity and impact, pass {cycle}" + } + } + + def _research(self, refined_output): + query = refined_output.get("output", "") + inspiration = query_knowledge_base(query) + integrated = f"{refined_output['output']} + Research Applied: {inspiration}" + return { + "input": query, + "output": integrated, + "meta": { + "agent": self.agent, + "stage": "research", + "source": "internal_kb" + } + } + + def _finalize(self, researched_output): + summary = researched_output.get("output", "") + return { + "input": researched_output["input"], + "output": summary, + "meta": { + "agent": self.agent, + "stage": "final", + "timestamp": datetime.now().isoformat() + } + } \ No newline at end of file diff --git a/backend/agents/supervisor.py b/backend/agents/supervisor.py new file mode 100644 index 0000000000000000000000000000000000000000..66183b59c1d109feefcb7befbc4b416559dbbd27 --- /dev/null +++ b/backend/agents/supervisor.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import requests +import pandas as pd +from datetime import datetime + +class AgenticSupervisor: + def __init__(self, config_path="supervisor_config.yml"): + self.config = self._load_config(config_path) + self.df = pd.read_csv(self.config['master_plan_path']) + + def _load_config(self, path): + try: + import yaml + with open(path) as f: + return yaml.safe_load(f) + except Exception as e: + self._alert(f"Config load failed: {str(e)}", critical=True) + + def _alert(self, message, critical=False): + if critical: + requests.post(self.config['alerts']['pagerduty'], json={ + "title": "CRITICAL: Agentic Supervisor", + "message": message + }) + print(f"[{datetime.now()}] {message}") + + def check_workflows(self): + for _, row in self.df.iterrows(): + try: + resp = requests.get( + f"{self.config['workflow_api']}/status/{row['Component']}", + timeout=5 + ) + if resp.status_code != 200: + self._alert(f"Workflow DOWN: {row['Component']}", critical=True) + except Exception as e: + self._alert(f"Workflow check failed: {str(e)}") + + def enforce_sla(self): + for _, row in self.df[self.df['SLA_Penalty'].notna()].iterrows(): + metric = get_metric(row['Component']) # Placeholder + if metric > float(row['SLA_Threshold']): + self._alert(f"SLA Violation: {row['Component']} at {metric}") + +if __name__ == "__main__": + supervisor = AgenticSupervisor() + supervisor.check_workflows() + supervisor.enforce_sla() diff --git a/backend/agents/test_crash.py b/backend/agents/test_crash.py new file mode 100644 index 0000000000000000000000000000000000000000..7e7ce8a68aec44b4211391f304448a2c7f40c004 --- /dev/null +++ b/backend/agents/test_crash.py @@ -0,0 +1 @@ +# Simulates crash to test resilience \ No newline at end of file diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000000000000000000000000000000000000..7fd8a18ef8ff47224893bd57ac5ffd9b8a228576 --- /dev/null +++ b/backend/app.py @@ -0,0 +1,204 @@ + +from fastapi import FastAPI, UploadFile, File, Form +from fastapi.middleware.cors import CORSMiddleware +from pydantic import BaseModel +import pandas as pd +import os +import json +from core.engine.multiplexing_engine import run_simulation # must be a callable function + +from routes.reddit_auth import router as reddit_router +from routes.discord_auth import router as discord_router +from routes.github_auth import router as github_router +from routes.huggingface_auth import router as hf_router +from routes.wayback_lookup import router as wayback_router +from routes.dork_search import router as dork_router +from routes.exploitdb_lookup import router as exploitdb_router +app.include_router(reddit_router) +app.include_router(discord_router) +app.include_router(github_router) +app.include_router(hf_router) +app.include_router(wayback_router) +app.include_router(dork_router) +app.include_router(exploitdb_router) +from routes.reddit_auth import router as reddit_router +from routes.discord_auth import router as discord_router +from routes.github_auth import router as github_router +from routes.huggingface_auth import router as hf_router +from routes.wayback_lookup import router as wayback_router +from routes.dork_search import router as dork_router +from routes.exploitdb_lookup import router as exploitdb_router +from routes.spreadsheet_intake import router as spreadsheet_router +from routes.neurocircuit_api import router as neurocircuit_router +from routes.mindmap_api import router as mindmap_router +app = FastAPI() + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +DATA_DIR = os.path.join(os.path.dirname(__file__), "data") +AGENTS_FILE = os.path.join(DATA_DIR, "Agentic_Deployment_Master_Plan_v3.2.csv") +DIGS_FILE = os.path.join(DATA_DIR, "DIGS_Cognitive_Psychology_Final_Output.csv") +MATRIX_FILE = os.path.join(DATA_DIR, "matrix.csv") + +class SimulationInput(BaseModel): + asset: str + capital: float + risk: int + +@app.post("/simulate") +def simulate(input: SimulationInput): + try: + result = run_simulation( + asset=input.asset, + capital=input.capital, + risk=input.risk, + digs_path=DIGS_FILE, + matrix_path=MATRIX_FILE + ) + return {"projected_yield": result["yield"], "agent_notes": result.get("notes", "")} + except Exception as e: + return {"error": str(e)} + + + +@app.get("/agent_status") +def agent_status(): + try: + df = pd.read_csv(AGENTS_FILE) + enriched_agents = [] + for idx, row in df.iterrows(): + enriched_agents.append({ + "id": f"agent{idx}", + "name": row.get("name", f"Agent {idx}"), + "traits": row.get("traits", "unspecified"), + "risk": int(row.get("risk", 3)), + "status": "active", + "memory_kb": 0, # using whole CSV as memory file + "endpoints": ["Google", "Notion", "Shodan"] # example endpoints + }) + return {"active_agents": len(enriched_agents), "agents": enriched_agents} + except Exception as e: + return {"error": str(e)} +def agent_status(): + try: + df = pd.read_csv(AGENTS_FILE) + enriched_agents = [] + for _, row in df.iterrows(): + enriched_agents.append({ + "name": row.get("name", f"Agent"), + "traits": row.get("traits", "unknown"), + "risk": row.get("risk", 3), + "status": "active" + }) + return {"active_agents": len(enriched_agents), "agents": enriched_agents} + except Exception as e: + return {"error": str(e)} +def agent_status(): + try: + df = pd.read_csv(AGENTS_FILE) + return {"active_agents": len(df), "agents": df.to_dict(orient="records")} + except Exception as e: + return {"error": str(e)} + +@app.post("/upload_csv") +def upload_csv(file: UploadFile = File(...)): + try: + contents = file.file.read() + new_path = os.path.join(DATA_DIR, file.filename) + with open(new_path, "wb") as f: + f.write(contents) + return {"status": "uploaded", "path": new_path} + except Exception as e: + return {"error": str(e)} + + + +from fastapi import FastAPI, UploadFile, File, Request +from fastapi.middleware.cors import CORSMiddleware +from pydantic import BaseModel +import os, json + +CREDENTIALS_PATH = os.path.join(os.path.dirname(__file__), "data", "user_credentials.json") +ADMIN_ENV_PATH = os.path.join(os.path.dirname(__file__), "..", ".env") + +class IntakeData(BaseModel): + role: str + github: str = None + docker: str = None + digitalocean: str = None + google: str = None + notion: str = None + custom: str = None + +@app.post("/intake") +def handle_intake(data: IntakeData): + if data.role == "admin": + creds = { + "GITHUB_TOKEN": data.github, + "DOCKER_TOKEN": data.docker, + "DO_API_KEY": data.digitalocean + } + with open(ADMIN_ENV_PATH, "a") as f: + for k, v in creds.items(): + if v: + f.write(f"{k}={v}\n") + return {"message": "Admin credentials saved to .env."} + + elif data.role == "user": + session_data = { + "google": data.google, + "notion": data.notion, + "custom": data.custom + } + with open(CREDENTIALS_PATH, "w") as f: + json.dump(session_data, f) + return {"message": "User session credentials stored."} + + return {"message": "Invalid role or missing data."} + +@app.post("/upload_credentials") +def upload_cred_file(file: UploadFile = File(...)): + try: + content = file.file.read() + with open(CREDENTIALS_PATH, "wb") as f: + f.write(content) + return {"message": "Credential file uploaded and stored."} + except Exception as e: + return {"error": str(e)} + +@app.get("/credentials") +def view_creds(): + try: + with open(CREDENTIALS_PATH) as f: + return json.load(f) + except FileNotFoundError: + return {"error": "No credentials file found."} + +app.include_router(google_router) + +app.include_router(notion_router) + +app.include_router(reddit_router) + +app.include_router(discord_router) + +app.include_router(github_router) + +app.include_router(hf_router) + +app.include_router(wayback_router) + +app.include_router(dork_router) + +app.include_router(exploitdb_router) + +app.include_router(spreadsheet_router) + +app.include_router(neurocircuit_router) +app.include_router(mindmap_router) diff --git a/backend/backend_services_status.json b/backend/backend_services_status.json new file mode 100644 index 0000000000000000000000000000000000000000..b9aac8dd9d624114081726328de543d177f6238e --- /dev/null +++ b/backend/backend_services_status.json @@ -0,0 +1,5 @@ +{ + "digs_engine": "stopped", + "task_runner": "stopped", + "oauth_monitor": "stopped" +} \ No newline at end of file diff --git a/backend/chaos_test.sh b/backend/chaos_test.sh new file mode 100644 index 0000000000000000000000000000000000000000..97b5e913c1463f5c7bf0fe9fccfd5394640c70e4 --- /dev/null +++ b/backend/chaos_test.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Simulates agent failures across the stack + +# 1. Randomly kill pods +kubectl get pods -n agentic --no-headers | awk '{print $1}' | xargs -I {} -n 1 -P 10 kubectl delete pod -n agentic {} --grace-period=0 --force & + +# 2. Network latency injection +kubectl apply -f - < Dict[str, Any]: + try: + return json.loads(field.replace("'", '"')) + except json.JSONDecodeError: + return {} + + def _parse_behavior(self, behavior_str: str) -> Dict[str, Any]: + return self._parse_json_field(behavior_str) + + def _parse_security(self, security_str: str) -> Dict[str, Any]: + return self._parse_json_field(security_str) + + def _load_agent_class(self, role: str): + try: + module = importlib.import_module(f"agents.{role.lower()}") + return getattr(module, role) + except Exception as e: + self.logger.error(f"Agent class load failed: {str(e)}") + return None + + def dispatch_tasks(self): + for _, row in self.matrix.iterrows(): + agent_id = row["agent_id"] + role = row["role"] + config = self._parse_json_field(row.get("config", "{}")) + behavior = self._parse_behavior(row.get("behavior", "{}")) + security = self._parse_security(row.get("security", "{}")) + activation_logic = row.get("activation_logic", "lambda metrics: True") + + try: + if eval(activation_logic)({}): # pass empty context for now + AgentCls = self._load_agent_class(role) + if AgentCls: + agent_instance = AgentCls(**config) + if self.loop_enabled: + loop = LoopManager(agent_id) + result = loop.run_loop(f"Execute task for {agent_id}") + else: + result = agent_instance.execute(config=config, behavior=behavior) + print(f"{agent_id} executed: {result['output']}") + except Exception as e: + self.logger.error(f"Dispatch failed for {agent_id}: {str(e)}") + + def process_feedback(self, agent_id: str, feedback_data: Dict[str, Any]): + try: + loop = LoopManager(agent_id) + result = loop.run_loop(feedback_data.get("task_input", "No input")) + print(f"[Feedback] Loop complete for {agent_id}: {result['output']}") + except Exception as e: + self.logger.error(f"Feedback processing failed for {agent_id}: {str(e)}") \ No newline at end of file diff --git a/backend/data/Add to do list (1).json b/backend/data/Add to do list (1).json new file mode 100644 index 0000000000000000000000000000000000000000..5d58c6e24ba7eb9f0e2fd4663c41c9a4dc480c4a --- /dev/null +++ b/backend/data/Add to do list (1).json @@ -0,0 +1,1128 @@ +{ + "name": "Update to do list", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1695294, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Notion to do" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "fields": { + "title": "{{1.Task}}", + "U%7CNl": "{{1.Priority}}" + }, + "select": "list", + "database": "97fef15e70f845439002add3d0e0f797" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "Ybdp": { + "mode": "chose", + "label": "Empty" + }, + "vQXU": { + "mode": "chose" + }, + "U%7CNl": { + "mode": "edit" + }, + "%3D%7Ch%60": { + "mode": "chose", + "label": "Empty" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%3D%7Ch%60", + "type": "select", + "label": "Category", + "options": [ + { + "label": "Youtube", + "value": "Youtube" + }, + { + "label": "Tool Building", + "value": "Tool Building" + }, + { + "label": "FF Outbound", + "value": "FF Outbound" + }, + { + "label": "Inbound", + "value": "Inbound" + }, + { + "label": "noCRM", + "value": "noCRM" + }, + { + "label": "personal", + "value": "personal" + } + ], + "metadata": { + "type": "select" + }, + "validate": false + }, + { + "name": "U%7CNl", + "type": "select", + "label": "Priority", + "options": [ + { + "label": "Low", + "value": "Low" + }, + { + "label": "Medium", + "value": "Medium" + }, + { + "label": "High", + "value": "High" + } + ], + "metadata": { + "type": "select" + }, + "validate": false + }, + { + "name": "Ybdp", + "type": "select", + "label": "Status", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "This week", + "value": "This week" + }, + { + "label": "Not started", + "value": "Not started" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "In progress", + "value": "In progress" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Done", + "value": "Done" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "vQXU", + "type": "select", + "label": "Assign", + "options": "rpc://notion/1/listUsers?noBot=true", + "metadata": { + "type": "people" + }, + "multiple": true + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%3D%7Ch%60", + "type": "select", + "label": "Category", + "metadata": { + "type": "select" + } + }, + { + "name": "U%7CNl", + "type": "select", + "label": "Priority", + "metadata": { + "type": "select" + } + }, + { + "name": "Ybdp", + "type": "select", + "label": "Status", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "This week", + "Not started", + "In progress", + "Done" + ] + } + }, + { + "name": "vQXU", + "type": "select", + "label": "Assign", + "metadata": { + "type": "people" + }, + "multiple": true + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Category" + }, + { + "name": "Priority", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Priority" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Add to do list.json b/backend/data/Add to do list.json new file mode 100644 index 0000000000000000000000000000000000000000..5d58c6e24ba7eb9f0e2fd4663c41c9a4dc480c4a --- /dev/null +++ b/backend/data/Add to do list.json @@ -0,0 +1,1128 @@ +{ + "name": "Update to do list", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1695294, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Notion to do" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "fields": { + "title": "{{1.Task}}", + "U%7CNl": "{{1.Priority}}" + }, + "select": "list", + "database": "97fef15e70f845439002add3d0e0f797" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "Ybdp": { + "mode": "chose", + "label": "Empty" + }, + "vQXU": { + "mode": "chose" + }, + "U%7CNl": { + "mode": "edit" + }, + "%3D%7Ch%60": { + "mode": "chose", + "label": "Empty" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%3D%7Ch%60", + "type": "select", + "label": "Category", + "options": [ + { + "label": "Youtube", + "value": "Youtube" + }, + { + "label": "Tool Building", + "value": "Tool Building" + }, + { + "label": "FF Outbound", + "value": "FF Outbound" + }, + { + "label": "Inbound", + "value": "Inbound" + }, + { + "label": "noCRM", + "value": "noCRM" + }, + { + "label": "personal", + "value": "personal" + } + ], + "metadata": { + "type": "select" + }, + "validate": false + }, + { + "name": "U%7CNl", + "type": "select", + "label": "Priority", + "options": [ + { + "label": "Low", + "value": "Low" + }, + { + "label": "Medium", + "value": "Medium" + }, + { + "label": "High", + "value": "High" + } + ], + "metadata": { + "type": "select" + }, + "validate": false + }, + { + "name": "Ybdp", + "type": "select", + "label": "Status", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "This week", + "value": "This week" + }, + { + "label": "Not started", + "value": "Not started" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "In progress", + "value": "In progress" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Done", + "value": "Done" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "vQXU", + "type": "select", + "label": "Assign", + "options": "rpc://notion/1/listUsers?noBot=true", + "metadata": { + "type": "people" + }, + "multiple": true + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%3D%7Ch%60", + "type": "select", + "label": "Category", + "metadata": { + "type": "select" + } + }, + { + "name": "U%7CNl", + "type": "select", + "label": "Priority", + "metadata": { + "type": "select" + } + }, + { + "name": "Ybdp", + "type": "select", + "label": "Status", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "This week", + "Not started", + "In progress", + "Done" + ] + } + }, + { + "name": "vQXU", + "type": "select", + "label": "Assign", + "metadata": { + "type": "people" + }, + "multiple": true + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Category" + }, + { + "name": "Priority", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Priority" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Chart.yaml b/backend/data/Chart.yaml new file mode 100644 index 0000000000000000000000000000000000000000..462ba0ae5c4711f652f209dc6438378591183a3c --- /dev/null +++ b/backend/data/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: agentic-deployment +description: Agentic AI Helm Chart +version: 0.1.0 +dependencies: + - name: redis + version: 17.0.0 + repository: https://charts.bitnami.com/bitnami + - name: prometheus + version: 25.0.0 + repository: https://prometheus-community.github.io/helm-charts diff --git a/backend/data/Get Airtable Records (1).json b/backend/data/Get Airtable Records (1).json new file mode 100644 index 0000000000000000000000000000000000000000..daec5acfe346230156389f71344d05812ced3390 --- /dev/null +++ b/backend/data/Get Airtable Records (1).json @@ -0,0 +1,705 @@ +{ + "name": "Get Airtable records", + "flow": [ + { + "id": 3, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1829003, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -861, + "y": 757 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Airtable" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 31, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -620, + "y": 760 + } + }, + "routes": [ + { + "flow": [ + { + "id": 29, + "module": "airtable:ActionSearchRecords", + "version": 3, + "parameters": { + "__IMTCONN__": 3365053 + }, + "filter": { + "name": "Sort", + "conditions": [ + [ + { + "a": "{{3.Sort}}", + "b": "Likes", + "o": "text:equal" + } + ], + [ + { + "a": "{{3.Sort}}", + "b": "Comments", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "base": "appByC5zpZ3aPRZeu", + "sort": [ + { + "field": "{{3.Sort}}", + "direction": "desc" + } + ], + "table": "tblsgMaKjZ5M2IVU2", + "formula": "{{3.Filter}}", + "maxRecords": "{{3.`Amount of posts`}}", + "useColumnId": false + }, + "metadata": { + "designer": { + "x": -311, + "y": 564 + }, + "restore": { + "expect": { + "base": { + "mode": "chose", + "label": "Linkedin database" + }, + "sort": { + "mode": "chose", + "items": [ + { + "field": { + "mode": "edit" + }, + "direction": { + "mode": "chose", + "label": "Descending" + } + } + ] + }, + "view": { + "mode": "chose" + }, + "table": { + "mode": "chose", + "label": "Table 1" + }, + "fields": { + "mode": "chose" + }, + "useColumnId": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "airtable2" + }, + "label": "My Airtable Token or Key connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:airtable3,airtable2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "base", + "type": "select", + "label": "Base", + "required": true + }, + { + "name": "useColumnId", + "type": "boolean", + "label": "Use Column ID", + "required": true + }, + { + "name": "table", + "type": "select", + "label": "Table", + "required": true + }, + { + "name": "formula", + "type": "text", + "label": "Formula" + }, + { + "name": "maxRecords", + "type": "integer", + "label": "Limit" + }, + { + "name": "sort", + "spec": [ + { + "name": "field", + "type": "select", + "label": "Field", + "dynamic": true, + "options": [] + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Descending", + "value": "desc" + }, + { + "label": "Ascending", + "value": "asc" + } + ] + } + ], + "type": "array", + "label": "Sort" + }, + { + "name": "view", + "type": "select", + "label": "View" + }, + { + "name": "fields", + "type": "select", + "label": "Output Fields", + "multiple": true + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "createdTime", + "type": "date", + "label": "Created Time" + }, + { + "name": "Linkedin post", + "type": "text", + "label": "Linkedin post", + "multiline": true + }, + { + "name": "Creator", + "type": "text", + "label": "Creator" + }, + { + "name": "Likes", + "type": "number", + "label": "Likes" + }, + { + "name": "Comments", + "type": "number", + "label": "Comments" + }, + { + "name": "Date", + "time": false, + "type": "date", + "label": "Date" + } + ] + } + }, + { + "id": 35, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 29 + }, + "mapper": { + "Date": "{{29.Date}}", + "Likes": "{{29.Likes}}", + "Creator": "{{29.Creator}}", + "Comments": "{{29.Comments}}", + "Image URL": "{{29.`Image URL`}}", + "Linkedin post": "{{29.`Linkedin post`}}", + "Linkedin post url": "{{29.`Linkedin post url`}}" + }, + "metadata": { + "designer": { + "x": -51, + "y": 567 + }, + "restore": { + "extra": { + "feeder": { + "label": "Airtable - Search Records [29]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 36, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{35.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 200, + "y": 580 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 32, + "module": "airtable:ActionSearchRecords", + "version": 3, + "parameters": { + "__IMTCONN__": 3365053 + }, + "filter": { + "name": "Dont sort", + "conditions": [ + [ + { + "a": "{{3.Sort}}", + "b": "Likes", + "o": "text:notequal" + } + ], + [ + { + "a": "{{3.Sort}}", + "b": "Comments", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "base": "appByC5zpZ3aPRZeu", + "table": "tblsgMaKjZ5M2IVU2", + "formula": "{{3.Filter}}", + "maxRecords": "{{3.`Amount of posts`}}", + "useColumnId": false + }, + "metadata": { + "designer": { + "x": -298, + "y": 941 + }, + "restore": { + "expect": { + "base": { + "mode": "chose", + "label": "Linkedin database" + }, + "sort": { + "mode": "chose" + }, + "view": { + "mode": "chose" + }, + "table": { + "mode": "chose", + "label": "Table 1" + }, + "fields": { + "mode": "chose" + }, + "useColumnId": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "airtable2" + }, + "label": "My Airtable Token or Key connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:airtable3,airtable2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "base", + "type": "select", + "label": "Base", + "required": true + }, + { + "name": "useColumnId", + "type": "boolean", + "label": "Use Column ID", + "required": true + }, + { + "name": "table", + "type": "select", + "label": "Table", + "required": true + }, + { + "name": "formula", + "type": "text", + "label": "Formula" + }, + { + "name": "maxRecords", + "type": "integer", + "label": "Limit" + }, + { + "name": "sort", + "spec": [ + { + "name": "field", + "type": "select", + "label": "Field", + "dynamic": true, + "options": [] + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Descending", + "value": "desc" + }, + { + "label": "Ascending", + "value": "asc" + } + ] + } + ], + "type": "array", + "label": "Sort" + }, + { + "name": "view", + "type": "select", + "label": "View" + }, + { + "name": "fields", + "type": "select", + "label": "Output Fields", + "multiple": true + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "createdTime", + "type": "date", + "label": "Created Time" + }, + { + "name": "Linkedin post", + "type": "text", + "label": "Linkedin post", + "multiline": true + }, + { + "name": "Creator", + "type": "text", + "label": "Creator" + }, + { + "name": "Likes", + "type": "number", + "label": "Likes" + }, + { + "name": "Comments", + "type": "number", + "label": "Comments" + }, + { + "name": "Date", + "time": false, + "type": "date", + "label": "Date" + } + ] + } + }, + { + "id": 33, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 3 + }, + "mapper": { + "Date": "{{32.Date}}", + "Likes": "{{32.Likes}}", + "Creator": "{{32.Creator}}", + "Comments": "{{32.Comments}}", + "Image URL": "{{32.`Image URL`}}", + "Linkedin post": "{{32.`Linkedin post`}}", + "Linkedin post url": "{{32.`Linkedin post url`}}" + }, + "metadata": { + "designer": { + "x": -32, + "y": 941 + }, + "restore": { + "extra": { + "feeder": { + "label": "Webhooks - Custom webhook [3]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 34, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{33.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 219, + "y": 954 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Get Airtable Records.json b/backend/data/Get Airtable Records.json new file mode 100644 index 0000000000000000000000000000000000000000..daec5acfe346230156389f71344d05812ced3390 --- /dev/null +++ b/backend/data/Get Airtable Records.json @@ -0,0 +1,705 @@ +{ + "name": "Get Airtable records", + "flow": [ + { + "id": 3, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1829003, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -861, + "y": 757 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Airtable" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 31, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -620, + "y": 760 + } + }, + "routes": [ + { + "flow": [ + { + "id": 29, + "module": "airtable:ActionSearchRecords", + "version": 3, + "parameters": { + "__IMTCONN__": 3365053 + }, + "filter": { + "name": "Sort", + "conditions": [ + [ + { + "a": "{{3.Sort}}", + "b": "Likes", + "o": "text:equal" + } + ], + [ + { + "a": "{{3.Sort}}", + "b": "Comments", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "base": "appByC5zpZ3aPRZeu", + "sort": [ + { + "field": "{{3.Sort}}", + "direction": "desc" + } + ], + "table": "tblsgMaKjZ5M2IVU2", + "formula": "{{3.Filter}}", + "maxRecords": "{{3.`Amount of posts`}}", + "useColumnId": false + }, + "metadata": { + "designer": { + "x": -311, + "y": 564 + }, + "restore": { + "expect": { + "base": { + "mode": "chose", + "label": "Linkedin database" + }, + "sort": { + "mode": "chose", + "items": [ + { + "field": { + "mode": "edit" + }, + "direction": { + "mode": "chose", + "label": "Descending" + } + } + ] + }, + "view": { + "mode": "chose" + }, + "table": { + "mode": "chose", + "label": "Table 1" + }, + "fields": { + "mode": "chose" + }, + "useColumnId": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "airtable2" + }, + "label": "My Airtable Token or Key connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:airtable3,airtable2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "base", + "type": "select", + "label": "Base", + "required": true + }, + { + "name": "useColumnId", + "type": "boolean", + "label": "Use Column ID", + "required": true + }, + { + "name": "table", + "type": "select", + "label": "Table", + "required": true + }, + { + "name": "formula", + "type": "text", + "label": "Formula" + }, + { + "name": "maxRecords", + "type": "integer", + "label": "Limit" + }, + { + "name": "sort", + "spec": [ + { + "name": "field", + "type": "select", + "label": "Field", + "dynamic": true, + "options": [] + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Descending", + "value": "desc" + }, + { + "label": "Ascending", + "value": "asc" + } + ] + } + ], + "type": "array", + "label": "Sort" + }, + { + "name": "view", + "type": "select", + "label": "View" + }, + { + "name": "fields", + "type": "select", + "label": "Output Fields", + "multiple": true + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "createdTime", + "type": "date", + "label": "Created Time" + }, + { + "name": "Linkedin post", + "type": "text", + "label": "Linkedin post", + "multiline": true + }, + { + "name": "Creator", + "type": "text", + "label": "Creator" + }, + { + "name": "Likes", + "type": "number", + "label": "Likes" + }, + { + "name": "Comments", + "type": "number", + "label": "Comments" + }, + { + "name": "Date", + "time": false, + "type": "date", + "label": "Date" + } + ] + } + }, + { + "id": 35, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 29 + }, + "mapper": { + "Date": "{{29.Date}}", + "Likes": "{{29.Likes}}", + "Creator": "{{29.Creator}}", + "Comments": "{{29.Comments}}", + "Image URL": "{{29.`Image URL`}}", + "Linkedin post": "{{29.`Linkedin post`}}", + "Linkedin post url": "{{29.`Linkedin post url`}}" + }, + "metadata": { + "designer": { + "x": -51, + "y": 567 + }, + "restore": { + "extra": { + "feeder": { + "label": "Airtable - Search Records [29]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 36, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{35.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 200, + "y": 580 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 32, + "module": "airtable:ActionSearchRecords", + "version": 3, + "parameters": { + "__IMTCONN__": 3365053 + }, + "filter": { + "name": "Dont sort", + "conditions": [ + [ + { + "a": "{{3.Sort}}", + "b": "Likes", + "o": "text:notequal" + } + ], + [ + { + "a": "{{3.Sort}}", + "b": "Comments", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "base": "appByC5zpZ3aPRZeu", + "table": "tblsgMaKjZ5M2IVU2", + "formula": "{{3.Filter}}", + "maxRecords": "{{3.`Amount of posts`}}", + "useColumnId": false + }, + "metadata": { + "designer": { + "x": -298, + "y": 941 + }, + "restore": { + "expect": { + "base": { + "mode": "chose", + "label": "Linkedin database" + }, + "sort": { + "mode": "chose" + }, + "view": { + "mode": "chose" + }, + "table": { + "mode": "chose", + "label": "Table 1" + }, + "fields": { + "mode": "chose" + }, + "useColumnId": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "airtable2" + }, + "label": "My Airtable Token or Key connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:airtable3,airtable2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "base", + "type": "select", + "label": "Base", + "required": true + }, + { + "name": "useColumnId", + "type": "boolean", + "label": "Use Column ID", + "required": true + }, + { + "name": "table", + "type": "select", + "label": "Table", + "required": true + }, + { + "name": "formula", + "type": "text", + "label": "Formula" + }, + { + "name": "maxRecords", + "type": "integer", + "label": "Limit" + }, + { + "name": "sort", + "spec": [ + { + "name": "field", + "type": "select", + "label": "Field", + "dynamic": true, + "options": [] + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Descending", + "value": "desc" + }, + { + "label": "Ascending", + "value": "asc" + } + ] + } + ], + "type": "array", + "label": "Sort" + }, + { + "name": "view", + "type": "select", + "label": "View" + }, + { + "name": "fields", + "type": "select", + "label": "Output Fields", + "multiple": true + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "createdTime", + "type": "date", + "label": "Created Time" + }, + { + "name": "Linkedin post", + "type": "text", + "label": "Linkedin post", + "multiline": true + }, + { + "name": "Creator", + "type": "text", + "label": "Creator" + }, + { + "name": "Likes", + "type": "number", + "label": "Likes" + }, + { + "name": "Comments", + "type": "number", + "label": "Comments" + }, + { + "name": "Date", + "time": false, + "type": "date", + "label": "Date" + } + ] + } + }, + { + "id": 33, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 3 + }, + "mapper": { + "Date": "{{32.Date}}", + "Likes": "{{32.Likes}}", + "Creator": "{{32.Creator}}", + "Comments": "{{32.Comments}}", + "Image URL": "{{32.`Image URL`}}", + "Linkedin post": "{{32.`Linkedin post`}}", + "Linkedin post url": "{{32.`Linkedin post url`}}" + }, + "metadata": { + "designer": { + "x": -32, + "y": 941 + }, + "restore": { + "extra": { + "feeder": { + "label": "Webhooks - Custom webhook [3]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 34, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{33.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 219, + "y": 954 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Get to do (1).json b/backend/data/Get to do (1).json new file mode 100644 index 0000000000000000000000000000000000000000..2700a52ae4588b2265447776ae2c320a45000059 --- /dev/null +++ b/backend/data/Get to do (1).json @@ -0,0 +1,1483 @@ +{ + "name": "Get to-do list", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1695383, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Get notion" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 7, + "module": "notion:searchObjects1", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "limit": "10", + "filter": [ + [ + { + "a": "Priority |&*^%$#@| select", + "b": "High", + "o": "text:equals" + } + ] + ], + "select": "item", + "database": "97fef15e70f845439002add3d0e0f797" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "sorts": { + "mode": "chose" + }, + "select": { + "label": "Database Items" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Search Objects", + "required": true, + "validate": { + "enum": [ + "item", + "database", + "page" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": { + "store": [ + { + "label": "Category (Select)", + "value": "Category |&*^%$#@| select" + }, + { + "label": "Priority (Select)", + "value": "Priority |&*^%$#@| select" + }, + { + "label": "Assign (People)", + "value": "Assign |&*^%$#@| people" + }, + { + "label": "Name (Title)", + "value": "Name |&*^%$#@| title" + } + ], + "operators": [ + { + "label": "Text", + "options": [ + { + "label": "Equals", + "value": "text:equals" + }, + { + "label": "Does not equal", + "value": "text:does_not_equal" + }, + { + "label": "Contains", + "value": "text:contains" + }, + { + "label": "Does not contain", + "value": "text:does_not_contain" + }, + { + "label": "Starts with", + "value": "text:starts_with" + }, + { + "label": "Ends with", + "value": "text:ends_with" + }, + { + "label": "Is empty (Boolean)", + "value": "text:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "text:is_not_empty" + } + ] + }, + { + "label": "Number", + "options": [ + { + "label": "Equals", + "value": "number:equals" + }, + { + "label": "Does not equal", + "value": "number:does_not_equal" + }, + { + "label": "Greater than", + "value": "number:greater_than" + }, + { + "label": "Less than", + "value": "number:less_than" + }, + { + "label": "Greater than or equal to", + "value": "number:greater_than_or_equal_to" + }, + { + "label": "Less than or equal to", + "value": "number:less_than_or_equal_to" + }, + { + "label": "Is empty (Boolean)", + "value": "number:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "number:is_not_empty" + } + ] + }, + { + "label": "Date", + "options": [ + { + "label": "Equals", + "value": "date:equals" + }, + { + "label": "Before", + "value": "date:before" + }, + { + "label": "After", + "value": "date:after" + }, + { + "label": "On or before", + "value": "date:on_or_before" + }, + { + "label": "On or after", + "value": "date:on_or_after" + }, + { + "label": "Is empty (Boolean)", + "value": "date:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "date:is_not_empty" + } + ] + }, + { + "label": "Checkbox", + "options": [ + { + "label": "Equals", + "value": "checkbox:equals" + }, + { + "label": "Does not equal", + "value": "checkbox:does_not_equal" + } + ] + }, + { + "label": "File", + "options": [ + { + "label": "Equals", + "value": "file:equals" + }, + { + "label": "Does not equal", + "value": "file:does_not_equal" + } + ] + }, + { + "label": "Select", + "options": [ + { + "label": "Equals", + "value": "select:equals" + }, + { + "label": "Does not equal", + "value": "select:does_not_equal" + }, + { + "label": "Is empty (Boolean)", + "value": "select:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "select:is_not_empty" + } + ] + }, + { + "label": "Multi-select", + "options": [ + { + "label": "Contains", + "value": "multiselect:contains" + }, + { + "label": "Does not contain", + "value": "multiselect:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "multiselect:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "multiselect:is_not_empty" + } + ] + }, + { + "label": "People", + "options": [ + { + "label": "Contains", + "value": "people:contains" + }, + { + "label": "Does not contain", + "value": "people:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "people:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "people:is_not_empty" + } + ] + }, + { + "label": "Relation", + "options": [ + { + "label": "Contains", + "value": "relation:contains" + }, + { + "label": "Does not contain", + "value": "relation:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "relation:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "relation:is_not_empty" + } + ] + }, + { + "label": "Formula", + "options": [ + { + "label": "String - Equals", + "value": "formula:text-equals" + }, + { + "label": "String - Does not equal", + "value": "formula:text-does_not_equal" + }, + { + "label": "String - Contains", + "value": "formula:text-contains" + }, + { + "label": "String - Does not contain", + "value": "formula:text-does_not_contain" + }, + { + "label": "String - Starts with", + "value": "formula:text-starts_with" + }, + { + "label": "String - Ends with", + "value": "formula:text-ends_with" + }, + { + "label": "String - Is empty (Boolean)", + "value": "formula:text-is_empty" + }, + { + "label": "Text - Is not empty (boolean)", + "value": "formula:text-is_not_empty" + }, + { + "label": "Checkbox - Equals", + "value": "formula:checkbox-equals" + }, + { + "label": "Checkbox - Does not equal", + "value": "formula:checkbox-does_not_equal" + }, + { + "label": "Number - Equals", + "value": "formula:number-equals" + }, + { + "label": "Number - Does not equal", + "value": "formula:number-does_not_equal" + }, + { + "label": "Number - Greater than", + "value": "formula:number-greater_than" + }, + { + "label": "Number - Less than", + "value": "formula:number-less_than" + }, + { + "label": "Number - Greater than or equal to", + "value": "formula:number-greater_than_or_equal_to" + }, + { + "label": "Number - Less than or equal to", + "value": "formula:number-less_than_or_equal_to" + }, + { + "label": "Number - Is empty (Boolean)", + "value": "formula:number-is_empty" + }, + { + "label": "Number - Is not empty (boolean)", + "value": "formula:number-is_not_empty" + }, + { + "label": "Date - Equals", + "value": "formula:date-equals" + }, + { + "label": "Date - before", + "value": "formula:date-before" + }, + { + "label": "Date - after", + "value": "formula:date-after" + }, + { + "label": "Date - On or before", + "value": "formula:date-on_or_before" + }, + { + "label": "Date - On or after", + "value": "formula:date-on_or_after" + }, + { + "label": "Date - Is empty (Boolean)", + "value": "formula:date-is_empty" + }, + { + "label": "Date - Is not empty (boolean)", + "value": "formula:date-is_not_empty" + } + ] + } + ] + } + }, + { + "name": "sorts", + "spec": [ + { + "name": "select", + "type": "select", + "label": "Select a Field to Sort", + "options": [ + { + "label": "Property Field", + "value": "property", + "nested": [ + { + "name": "property", + "type": "select", + "label": "Property Field", + "options": "rpc://notion/1/listDatabasePropertiesFieldsForFilter?sortParameter=true", + "required": true + } + ] + }, + { + "label": "Timestamp", + "value": "timestamp", + "nested": [ + { + "name": "timestamp", + "type": "select", + "label": "Timestamp", + "options": [ + { + "label": "Created time", + "value": "created_time", + "default": true + }, + { + "label": "Last edited time", + "value": "last_edited_time" + } + ], + "required": true + } + ], + "default": true + } + ], + "required": true + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Ascending", + "value": "ascending" + }, + { + "label": "Descending", + "value": "descending" + } + ], + "required": true + } + ], + "type": "array", + "label": "Sorts" + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Page ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Category" + }, + { + "name": "Priority", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Priority" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + }, + { + "id": 8, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 7, + "target": "9.headers" + }, + "mapper": { + "key": "Task", + "value": "{{7.properties_value.Name[].text.content}}" + }, + "metadata": { + "designer": { + "x": 600, + "y": 0 + }, + "restore": { + "extra": { + "feeder": { + "label": "Notion - Search Objects [7]" + }, + "target": { + "label": "Custom headers" + } + } + }, + "expect": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "advanced": true + } + }, + { + "id": 9, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 900, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Get to do.json b/backend/data/Get to do.json new file mode 100644 index 0000000000000000000000000000000000000000..2700a52ae4588b2265447776ae2c320a45000059 --- /dev/null +++ b/backend/data/Get to do.json @@ -0,0 +1,1483 @@ +{ + "name": "Get to-do list", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1695383, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Get notion" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 7, + "module": "notion:searchObjects1", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "limit": "10", + "filter": [ + [ + { + "a": "Priority |&*^%$#@| select", + "b": "High", + "o": "text:equals" + } + ] + ], + "select": "item", + "database": "97fef15e70f845439002add3d0e0f797" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "sorts": { + "mode": "chose" + }, + "select": { + "label": "Database Items" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Search Objects", + "required": true, + "validate": { + "enum": [ + "item", + "database", + "page" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": { + "store": [ + { + "label": "Category (Select)", + "value": "Category |&*^%$#@| select" + }, + { + "label": "Priority (Select)", + "value": "Priority |&*^%$#@| select" + }, + { + "label": "Assign (People)", + "value": "Assign |&*^%$#@| people" + }, + { + "label": "Name (Title)", + "value": "Name |&*^%$#@| title" + } + ], + "operators": [ + { + "label": "Text", + "options": [ + { + "label": "Equals", + "value": "text:equals" + }, + { + "label": "Does not equal", + "value": "text:does_not_equal" + }, + { + "label": "Contains", + "value": "text:contains" + }, + { + "label": "Does not contain", + "value": "text:does_not_contain" + }, + { + "label": "Starts with", + "value": "text:starts_with" + }, + { + "label": "Ends with", + "value": "text:ends_with" + }, + { + "label": "Is empty (Boolean)", + "value": "text:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "text:is_not_empty" + } + ] + }, + { + "label": "Number", + "options": [ + { + "label": "Equals", + "value": "number:equals" + }, + { + "label": "Does not equal", + "value": "number:does_not_equal" + }, + { + "label": "Greater than", + "value": "number:greater_than" + }, + { + "label": "Less than", + "value": "number:less_than" + }, + { + "label": "Greater than or equal to", + "value": "number:greater_than_or_equal_to" + }, + { + "label": "Less than or equal to", + "value": "number:less_than_or_equal_to" + }, + { + "label": "Is empty (Boolean)", + "value": "number:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "number:is_not_empty" + } + ] + }, + { + "label": "Date", + "options": [ + { + "label": "Equals", + "value": "date:equals" + }, + { + "label": "Before", + "value": "date:before" + }, + { + "label": "After", + "value": "date:after" + }, + { + "label": "On or before", + "value": "date:on_or_before" + }, + { + "label": "On or after", + "value": "date:on_or_after" + }, + { + "label": "Is empty (Boolean)", + "value": "date:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "date:is_not_empty" + } + ] + }, + { + "label": "Checkbox", + "options": [ + { + "label": "Equals", + "value": "checkbox:equals" + }, + { + "label": "Does not equal", + "value": "checkbox:does_not_equal" + } + ] + }, + { + "label": "File", + "options": [ + { + "label": "Equals", + "value": "file:equals" + }, + { + "label": "Does not equal", + "value": "file:does_not_equal" + } + ] + }, + { + "label": "Select", + "options": [ + { + "label": "Equals", + "value": "select:equals" + }, + { + "label": "Does not equal", + "value": "select:does_not_equal" + }, + { + "label": "Is empty (Boolean)", + "value": "select:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "select:is_not_empty" + } + ] + }, + { + "label": "Multi-select", + "options": [ + { + "label": "Contains", + "value": "multiselect:contains" + }, + { + "label": "Does not contain", + "value": "multiselect:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "multiselect:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "multiselect:is_not_empty" + } + ] + }, + { + "label": "People", + "options": [ + { + "label": "Contains", + "value": "people:contains" + }, + { + "label": "Does not contain", + "value": "people:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "people:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "people:is_not_empty" + } + ] + }, + { + "label": "Relation", + "options": [ + { + "label": "Contains", + "value": "relation:contains" + }, + { + "label": "Does not contain", + "value": "relation:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "relation:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "relation:is_not_empty" + } + ] + }, + { + "label": "Formula", + "options": [ + { + "label": "String - Equals", + "value": "formula:text-equals" + }, + { + "label": "String - Does not equal", + "value": "formula:text-does_not_equal" + }, + { + "label": "String - Contains", + "value": "formula:text-contains" + }, + { + "label": "String - Does not contain", + "value": "formula:text-does_not_contain" + }, + { + "label": "String - Starts with", + "value": "formula:text-starts_with" + }, + { + "label": "String - Ends with", + "value": "formula:text-ends_with" + }, + { + "label": "String - Is empty (Boolean)", + "value": "formula:text-is_empty" + }, + { + "label": "Text - Is not empty (boolean)", + "value": "formula:text-is_not_empty" + }, + { + "label": "Checkbox - Equals", + "value": "formula:checkbox-equals" + }, + { + "label": "Checkbox - Does not equal", + "value": "formula:checkbox-does_not_equal" + }, + { + "label": "Number - Equals", + "value": "formula:number-equals" + }, + { + "label": "Number - Does not equal", + "value": "formula:number-does_not_equal" + }, + { + "label": "Number - Greater than", + "value": "formula:number-greater_than" + }, + { + "label": "Number - Less than", + "value": "formula:number-less_than" + }, + { + "label": "Number - Greater than or equal to", + "value": "formula:number-greater_than_or_equal_to" + }, + { + "label": "Number - Less than or equal to", + "value": "formula:number-less_than_or_equal_to" + }, + { + "label": "Number - Is empty (Boolean)", + "value": "formula:number-is_empty" + }, + { + "label": "Number - Is not empty (boolean)", + "value": "formula:number-is_not_empty" + }, + { + "label": "Date - Equals", + "value": "formula:date-equals" + }, + { + "label": "Date - before", + "value": "formula:date-before" + }, + { + "label": "Date - after", + "value": "formula:date-after" + }, + { + "label": "Date - On or before", + "value": "formula:date-on_or_before" + }, + { + "label": "Date - On or after", + "value": "formula:date-on_or_after" + }, + { + "label": "Date - Is empty (Boolean)", + "value": "formula:date-is_empty" + }, + { + "label": "Date - Is not empty (boolean)", + "value": "formula:date-is_not_empty" + } + ] + } + ] + } + }, + { + "name": "sorts", + "spec": [ + { + "name": "select", + "type": "select", + "label": "Select a Field to Sort", + "options": [ + { + "label": "Property Field", + "value": "property", + "nested": [ + { + "name": "property", + "type": "select", + "label": "Property Field", + "options": "rpc://notion/1/listDatabasePropertiesFieldsForFilter?sortParameter=true", + "required": true + } + ] + }, + { + "label": "Timestamp", + "value": "timestamp", + "nested": [ + { + "name": "timestamp", + "type": "select", + "label": "Timestamp", + "options": [ + { + "label": "Created time", + "value": "created_time", + "default": true + }, + { + "label": "Last edited time", + "value": "last_edited_time" + } + ], + "required": true + } + ], + "default": true + } + ], + "required": true + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Ascending", + "value": "ascending" + }, + { + "label": "Descending", + "value": "descending" + } + ], + "required": true + } + ], + "type": "array", + "label": "Sorts" + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Page ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Category" + }, + { + "name": "Priority", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Priority" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + }, + { + "id": 8, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 7, + "target": "9.headers" + }, + "mapper": { + "key": "Task", + "value": "{{7.properties_value.Name[].text.content}}" + }, + "metadata": { + "designer": { + "x": 600, + "y": 0 + }, + "restore": { + "extra": { + "feeder": { + "label": "Notion - Search Objects [7]" + }, + "target": { + "label": "Custom headers" + } + } + }, + "expect": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "advanced": true + } + }, + { + "id": 9, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 900, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Get youtube calendar (1).json b/backend/data/Get youtube calendar (1).json new file mode 100644 index 0000000000000000000000000000000000000000..28b46a3a661c6902b25cf15f6210b17dd1d0493b --- /dev/null +++ b/backend/data/Get youtube calendar (1).json @@ -0,0 +1,1702 @@ +{ + "name": "Get Youtube content calender", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1697323, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Get notion" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 7, + "module": "notion:searchObjects1", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "limit": "10", + "filter": [ + [ + { + "a": "Potential |&*^%$#@| select", + "b": "High", + "o": "text:equals" + } + ] + ], + "select": "item", + "database": "3b1dfa3a89954c89a8ab3743cfe05038" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "sorts": { + "mode": "chose" + }, + "select": { + "label": "Database Items" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Search Objects", + "required": true, + "validate": { + "enum": [ + "item", + "database", + "page" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": { + "store": [ + { + "label": "2 hour build? (Checkbox)", + "value": "2 hour build? |&*^%$#@| checkbox" + }, + { + "label": "Potential (Select)", + "value": "Potential |&*^%$#@| select" + }, + { + "label": "Category (Multi select)", + "value": "Category |&*^%$#@| multi_select" + }, + { + "label": "Title (Rich text)", + "value": "Title |&*^%$#@| rich_text" + }, + { + "label": "Built? (Checkbox)", + "value": "Built? |&*^%$#@| checkbox" + }, + { + "label": "Thumbnail (Rich text)", + "value": "Thumbnail |&*^%$#@| rich_text" + }, + { + "label": "Done (Checkbox)", + "value": "Done |&*^%$#@| checkbox" + }, + { + "label": "Hook (Rich text)", + "value": "Hook |&*^%$#@| rich_text" + }, + { + "label": "Idea (Title)", + "value": "Idea |&*^%$#@| title" + } + ], + "operators": [ + { + "label": "Text", + "options": [ + { + "label": "Equals", + "value": "text:equals" + }, + { + "label": "Does not equal", + "value": "text:does_not_equal" + }, + { + "label": "Contains", + "value": "text:contains" + }, + { + "label": "Does not contain", + "value": "text:does_not_contain" + }, + { + "label": "Starts with", + "value": "text:starts_with" + }, + { + "label": "Ends with", + "value": "text:ends_with" + }, + { + "label": "Is empty (Boolean)", + "value": "text:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "text:is_not_empty" + } + ] + }, + { + "label": "Number", + "options": [ + { + "label": "Equals", + "value": "number:equals" + }, + { + "label": "Does not equal", + "value": "number:does_not_equal" + }, + { + "label": "Greater than", + "value": "number:greater_than" + }, + { + "label": "Less than", + "value": "number:less_than" + }, + { + "label": "Greater than or equal to", + "value": "number:greater_than_or_equal_to" + }, + { + "label": "Less than or equal to", + "value": "number:less_than_or_equal_to" + }, + { + "label": "Is empty (Boolean)", + "value": "number:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "number:is_not_empty" + } + ] + }, + { + "label": "Date", + "options": [ + { + "label": "Equals", + "value": "date:equals" + }, + { + "label": "Before", + "value": "date:before" + }, + { + "label": "After", + "value": "date:after" + }, + { + "label": "On or before", + "value": "date:on_or_before" + }, + { + "label": "On or after", + "value": "date:on_or_after" + }, + { + "label": "Is empty (Boolean)", + "value": "date:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "date:is_not_empty" + } + ] + }, + { + "label": "Checkbox", + "options": [ + { + "label": "Equals", + "value": "checkbox:equals" + }, + { + "label": "Does not equal", + "value": "checkbox:does_not_equal" + } + ] + }, + { + "label": "File", + "options": [ + { + "label": "Equals", + "value": "file:equals" + }, + { + "label": "Does not equal", + "value": "file:does_not_equal" + } + ] + }, + { + "label": "Select", + "options": [ + { + "label": "Equals", + "value": "select:equals" + }, + { + "label": "Does not equal", + "value": "select:does_not_equal" + }, + { + "label": "Is empty (Boolean)", + "value": "select:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "select:is_not_empty" + } + ] + }, + { + "label": "Multi-select", + "options": [ + { + "label": "Contains", + "value": "multiselect:contains" + }, + { + "label": "Does not contain", + "value": "multiselect:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "multiselect:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "multiselect:is_not_empty" + } + ] + }, + { + "label": "People", + "options": [ + { + "label": "Contains", + "value": "people:contains" + }, + { + "label": "Does not contain", + "value": "people:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "people:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "people:is_not_empty" + } + ] + }, + { + "label": "Relation", + "options": [ + { + "label": "Contains", + "value": "relation:contains" + }, + { + "label": "Does not contain", + "value": "relation:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "relation:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "relation:is_not_empty" + } + ] + }, + { + "label": "Formula", + "options": [ + { + "label": "String - Equals", + "value": "formula:text-equals" + }, + { + "label": "String - Does not equal", + "value": "formula:text-does_not_equal" + }, + { + "label": "String - Contains", + "value": "formula:text-contains" + }, + { + "label": "String - Does not contain", + "value": "formula:text-does_not_contain" + }, + { + "label": "String - Starts with", + "value": "formula:text-starts_with" + }, + { + "label": "String - Ends with", + "value": "formula:text-ends_with" + }, + { + "label": "String - Is empty (Boolean)", + "value": "formula:text-is_empty" + }, + { + "label": "Text - Is not empty (boolean)", + "value": "formula:text-is_not_empty" + }, + { + "label": "Checkbox - Equals", + "value": "formula:checkbox-equals" + }, + { + "label": "Checkbox - Does not equal", + "value": "formula:checkbox-does_not_equal" + }, + { + "label": "Number - Equals", + "value": "formula:number-equals" + }, + { + "label": "Number - Does not equal", + "value": "formula:number-does_not_equal" + }, + { + "label": "Number - Greater than", + "value": "formula:number-greater_than" + }, + { + "label": "Number - Less than", + "value": "formula:number-less_than" + }, + { + "label": "Number - Greater than or equal to", + "value": "formula:number-greater_than_or_equal_to" + }, + { + "label": "Number - Less than or equal to", + "value": "formula:number-less_than_or_equal_to" + }, + { + "label": "Number - Is empty (Boolean)", + "value": "formula:number-is_empty" + }, + { + "label": "Number - Is not empty (boolean)", + "value": "formula:number-is_not_empty" + }, + { + "label": "Date - Equals", + "value": "formula:date-equals" + }, + { + "label": "Date - before", + "value": "formula:date-before" + }, + { + "label": "Date - after", + "value": "formula:date-after" + }, + { + "label": "Date - On or before", + "value": "formula:date-on_or_before" + }, + { + "label": "Date - On or after", + "value": "formula:date-on_or_after" + }, + { + "label": "Date - Is empty (Boolean)", + "value": "formula:date-is_empty" + }, + { + "label": "Date - Is not empty (boolean)", + "value": "formula:date-is_not_empty" + } + ] + } + ] + } + }, + { + "name": "sorts", + "spec": [ + { + "name": "select", + "type": "select", + "label": "Select a Field to Sort", + "options": [ + { + "label": "Property Field", + "value": "property", + "nested": [ + { + "name": "property", + "type": "select", + "label": "Property Field", + "options": "rpc://notion/1/listDatabasePropertiesFieldsForFilter?sortParameter=true", + "required": true + } + ] + }, + { + "label": "Timestamp", + "value": "timestamp", + "nested": [ + { + "name": "timestamp", + "type": "select", + "label": "Timestamp", + "options": [ + { + "label": "Created time", + "value": "created_time", + "default": true + }, + { + "label": "Last edited time", + "value": "last_edited_time" + } + ], + "required": true + } + ], + "default": true + } + ], + "required": true + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Ascending", + "value": "ascending" + }, + { + "label": "Descending", + "value": "descending" + } + ], + "required": true + } + ], + "type": "array", + "label": "Sorts" + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Page ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "2 hour build?", + "type": "boolean", + "label": "2 hour build?" + }, + { + "name": "Potential", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Potential" + }, + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Category" + }, + { + "name": "Title", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Title" + }, + { + "name": "Built?", + "type": "boolean", + "label": "Built?" + }, + { + "name": "Thumbnail", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Thumbnail" + }, + { + "name": "Done", + "type": "boolean", + "label": "Done" + }, + { + "name": "Process", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Process" + }, + { + "name": "Hook", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Hook" + }, + { + "name": "Idea", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Idea" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + }, + { + "id": 8, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 7, + "target": "9.headers" + }, + "mapper": { + "key": "Youtube idea", + "value": "{{7.properties_value.Idea[].text.content}}" + }, + "metadata": { + "designer": { + "x": 600, + "y": 0 + }, + "restore": { + "extra": { + "feeder": { + "label": "Notion - Search Objects [7]" + }, + "target": { + "label": "Custom headers" + } + } + }, + "expect": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "advanced": true + } + }, + { + "id": 9, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 900, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Get youtube calendar.json b/backend/data/Get youtube calendar.json new file mode 100644 index 0000000000000000000000000000000000000000..28b46a3a661c6902b25cf15f6210b17dd1d0493b --- /dev/null +++ b/backend/data/Get youtube calendar.json @@ -0,0 +1,1702 @@ +{ + "name": "Get Youtube content calender", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1697323, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Get notion" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 7, + "module": "notion:searchObjects1", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "limit": "10", + "filter": [ + [ + { + "a": "Potential |&*^%$#@| select", + "b": "High", + "o": "text:equals" + } + ] + ], + "select": "item", + "database": "3b1dfa3a89954c89a8ab3743cfe05038" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "sorts": { + "mode": "chose" + }, + "select": { + "label": "Database Items" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Search Objects", + "required": true, + "validate": { + "enum": [ + "item", + "database", + "page" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": { + "store": [ + { + "label": "2 hour build? (Checkbox)", + "value": "2 hour build? |&*^%$#@| checkbox" + }, + { + "label": "Potential (Select)", + "value": "Potential |&*^%$#@| select" + }, + { + "label": "Category (Multi select)", + "value": "Category |&*^%$#@| multi_select" + }, + { + "label": "Title (Rich text)", + "value": "Title |&*^%$#@| rich_text" + }, + { + "label": "Built? (Checkbox)", + "value": "Built? |&*^%$#@| checkbox" + }, + { + "label": "Thumbnail (Rich text)", + "value": "Thumbnail |&*^%$#@| rich_text" + }, + { + "label": "Done (Checkbox)", + "value": "Done |&*^%$#@| checkbox" + }, + { + "label": "Hook (Rich text)", + "value": "Hook |&*^%$#@| rich_text" + }, + { + "label": "Idea (Title)", + "value": "Idea |&*^%$#@| title" + } + ], + "operators": [ + { + "label": "Text", + "options": [ + { + "label": "Equals", + "value": "text:equals" + }, + { + "label": "Does not equal", + "value": "text:does_not_equal" + }, + { + "label": "Contains", + "value": "text:contains" + }, + { + "label": "Does not contain", + "value": "text:does_not_contain" + }, + { + "label": "Starts with", + "value": "text:starts_with" + }, + { + "label": "Ends with", + "value": "text:ends_with" + }, + { + "label": "Is empty (Boolean)", + "value": "text:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "text:is_not_empty" + } + ] + }, + { + "label": "Number", + "options": [ + { + "label": "Equals", + "value": "number:equals" + }, + { + "label": "Does not equal", + "value": "number:does_not_equal" + }, + { + "label": "Greater than", + "value": "number:greater_than" + }, + { + "label": "Less than", + "value": "number:less_than" + }, + { + "label": "Greater than or equal to", + "value": "number:greater_than_or_equal_to" + }, + { + "label": "Less than or equal to", + "value": "number:less_than_or_equal_to" + }, + { + "label": "Is empty (Boolean)", + "value": "number:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "number:is_not_empty" + } + ] + }, + { + "label": "Date", + "options": [ + { + "label": "Equals", + "value": "date:equals" + }, + { + "label": "Before", + "value": "date:before" + }, + { + "label": "After", + "value": "date:after" + }, + { + "label": "On or before", + "value": "date:on_or_before" + }, + { + "label": "On or after", + "value": "date:on_or_after" + }, + { + "label": "Is empty (Boolean)", + "value": "date:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "date:is_not_empty" + } + ] + }, + { + "label": "Checkbox", + "options": [ + { + "label": "Equals", + "value": "checkbox:equals" + }, + { + "label": "Does not equal", + "value": "checkbox:does_not_equal" + } + ] + }, + { + "label": "File", + "options": [ + { + "label": "Equals", + "value": "file:equals" + }, + { + "label": "Does not equal", + "value": "file:does_not_equal" + } + ] + }, + { + "label": "Select", + "options": [ + { + "label": "Equals", + "value": "select:equals" + }, + { + "label": "Does not equal", + "value": "select:does_not_equal" + }, + { + "label": "Is empty (Boolean)", + "value": "select:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "select:is_not_empty" + } + ] + }, + { + "label": "Multi-select", + "options": [ + { + "label": "Contains", + "value": "multiselect:contains" + }, + { + "label": "Does not contain", + "value": "multiselect:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "multiselect:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "multiselect:is_not_empty" + } + ] + }, + { + "label": "People", + "options": [ + { + "label": "Contains", + "value": "people:contains" + }, + { + "label": "Does not contain", + "value": "people:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "people:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "people:is_not_empty" + } + ] + }, + { + "label": "Relation", + "options": [ + { + "label": "Contains", + "value": "relation:contains" + }, + { + "label": "Does not contain", + "value": "relation:does_not_contain" + }, + { + "label": "Is empty (Boolean)", + "value": "relation:is_empty" + }, + { + "label": "Is not empty (boolean)", + "value": "relation:is_not_empty" + } + ] + }, + { + "label": "Formula", + "options": [ + { + "label": "String - Equals", + "value": "formula:text-equals" + }, + { + "label": "String - Does not equal", + "value": "formula:text-does_not_equal" + }, + { + "label": "String - Contains", + "value": "formula:text-contains" + }, + { + "label": "String - Does not contain", + "value": "formula:text-does_not_contain" + }, + { + "label": "String - Starts with", + "value": "formula:text-starts_with" + }, + { + "label": "String - Ends with", + "value": "formula:text-ends_with" + }, + { + "label": "String - Is empty (Boolean)", + "value": "formula:text-is_empty" + }, + { + "label": "Text - Is not empty (boolean)", + "value": "formula:text-is_not_empty" + }, + { + "label": "Checkbox - Equals", + "value": "formula:checkbox-equals" + }, + { + "label": "Checkbox - Does not equal", + "value": "formula:checkbox-does_not_equal" + }, + { + "label": "Number - Equals", + "value": "formula:number-equals" + }, + { + "label": "Number - Does not equal", + "value": "formula:number-does_not_equal" + }, + { + "label": "Number - Greater than", + "value": "formula:number-greater_than" + }, + { + "label": "Number - Less than", + "value": "formula:number-less_than" + }, + { + "label": "Number - Greater than or equal to", + "value": "formula:number-greater_than_or_equal_to" + }, + { + "label": "Number - Less than or equal to", + "value": "formula:number-less_than_or_equal_to" + }, + { + "label": "Number - Is empty (Boolean)", + "value": "formula:number-is_empty" + }, + { + "label": "Number - Is not empty (boolean)", + "value": "formula:number-is_not_empty" + }, + { + "label": "Date - Equals", + "value": "formula:date-equals" + }, + { + "label": "Date - before", + "value": "formula:date-before" + }, + { + "label": "Date - after", + "value": "formula:date-after" + }, + { + "label": "Date - On or before", + "value": "formula:date-on_or_before" + }, + { + "label": "Date - On or after", + "value": "formula:date-on_or_after" + }, + { + "label": "Date - Is empty (Boolean)", + "value": "formula:date-is_empty" + }, + { + "label": "Date - Is not empty (boolean)", + "value": "formula:date-is_not_empty" + } + ] + } + ] + } + }, + { + "name": "sorts", + "spec": [ + { + "name": "select", + "type": "select", + "label": "Select a Field to Sort", + "options": [ + { + "label": "Property Field", + "value": "property", + "nested": [ + { + "name": "property", + "type": "select", + "label": "Property Field", + "options": "rpc://notion/1/listDatabasePropertiesFieldsForFilter?sortParameter=true", + "required": true + } + ] + }, + { + "label": "Timestamp", + "value": "timestamp", + "nested": [ + { + "name": "timestamp", + "type": "select", + "label": "Timestamp", + "options": [ + { + "label": "Created time", + "value": "created_time", + "default": true + }, + { + "label": "Last edited time", + "value": "last_edited_time" + } + ], + "required": true + } + ], + "default": true + } + ], + "required": true + }, + { + "name": "direction", + "type": "select", + "label": "Direction", + "options": [ + { + "label": "Ascending", + "value": "ascending" + }, + { + "label": "Descending", + "value": "descending" + } + ], + "required": true + } + ], + "type": "array", + "label": "Sorts" + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Page ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "2 hour build?", + "type": "boolean", + "label": "2 hour build?" + }, + { + "name": "Potential", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Potential" + }, + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Category" + }, + { + "name": "Title", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Title" + }, + { + "name": "Built?", + "type": "boolean", + "label": "Built?" + }, + { + "name": "Thumbnail", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Thumbnail" + }, + { + "name": "Done", + "type": "boolean", + "label": "Done" + }, + { + "name": "Process", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Process" + }, + { + "name": "Hook", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Hook" + }, + { + "name": "Idea", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Idea" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + }, + { + "id": 8, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 7, + "target": "9.headers" + }, + "mapper": { + "key": "Youtube idea", + "value": "{{7.properties_value.Idea[].text.content}}" + }, + "metadata": { + "designer": { + "x": 600, + "y": 0 + }, + "restore": { + "extra": { + "feeder": { + "label": "Notion - Search Objects [7]" + }, + "target": { + "label": "Custom headers" + } + } + }, + "expect": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "advanced": true + } + }, + { + "id": 9, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 900, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com Whatsapp Blueprint (1).json b/backend/data/Make.com Whatsapp Blueprint (1).json new file mode 100644 index 0000000000000000000000000000000000000000..98c5a853487b68aaae31750b78c6b0781a6ab560 --- /dev/null +++ b/backend/data/Make.com Whatsapp Blueprint (1).json @@ -0,0 +1,2965 @@ +{ + "name": "Ben AI Clone", + "flow": [ + { + "id": 1, + "module": "whatsapp-business-cloud:watchEvents", + "version": 1, + "parameters": { + "__IMTHOOK__": 1916561 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 150 + }, + "restore": { + "parameters": { + "__IMTHOOK__": { + "data": { + "editable": "false" + }, + "label": "Ben AI" + } + } + }, + "parameters": [ + { + "name": "__IMTHOOK__", + "type": "hook:whatsapp-business-cloud2", + "label": "Webhook", + "required": true + } + ], + "interface": [ + { + "name": "id", + "type": "text", + "label": "WhatsApp Business Account ID" + }, + { + "name": "time", + "type": "date", + "label": "Time" + }, + { + "name": "field", + "type": "text", + "label": "Field" + }, + { + "name": "messaging_product", + "type": "text", + "label": "Messaging Product" + }, + { + "name": "metadata", + "spec": [ + { + "name": "display_phone_number", + "type": "text", + "label": "Display Phone Number" + }, + { + "name": "phone_number_id", + "type": "text", + "label": "Phone Number ID" + } + ], + "type": "collection", + "label": "Metadata" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "profile", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection", + "label": "Profile" + }, + { + "name": "wa_id", + "type": "text", + "label": "WhatsApp ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "messages", + "spec": { + "spec": [ + { + "name": "from", + "type": "text", + "label": "Sender" + }, + { + "name": "id", + "type": "text", + "label": "Message ID" + }, + { + "name": "timestamp", + "type": "date", + "label": "Timestamp" + }, + { + "name": "text", + "spec": [ + { + "name": "body", + "type": "text", + "label": "Body" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "image", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Image" + }, + { + "name": "audio", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "voice", + "type": "boolean", + "label": "Voice" + } + ], + "type": "collection", + "label": "Audio" + }, + { + "name": "video", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Video" + }, + { + "name": "document", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "filename", + "type": "text", + "label": "File Name" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Document" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "name", + "spec": [ + { + "name": "formatted_name", + "type": "text", + "label": "Formatted Name" + }, + { + "name": "first_name", + "type": "text", + "label": "First Name" + }, + { + "name": "last_name", + "type": "text", + "label": "Last Name" + }, + { + "name": "middle_name", + "type": "text", + "label": "Middle Name" + }, + { + "name": "suffix", + "type": "text", + "label": "Name Suffix" + }, + { + "name": "prefix", + "type": "text", + "label": "Name Prefix" + } + ], + "type": "collection", + "label": "Name" + }, + { + "name": "phones", + "spec": [ + { + "name": "phone", + "type": "text", + "label": "Phone" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Phones" + }, + { + "name": "emails", + "spec": [ + { + "name": "email", + "type": "email", + "label": "Email" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Emails" + }, + { + "name": "org", + "spec": [ + { + "name": "company", + "type": "text", + "label": "Company" + }, + { + "name": "department", + "type": "text", + "label": "Department" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Organization" + }, + { + "name": "urls", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "url", + "type": "url", + "label": "URL" + } + ], + "type": "array", + "label": "URLs" + }, + { + "name": "addresses", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "street", + "type": "text", + "label": "Street" + }, + { + "name": "city", + "type": "text", + "label": "City" + }, + { + "name": "zip", + "type": "text", + "label": "ZIP" + }, + { + "name": "country", + "type": "text", + "label": "Country" + }, + { + "name": "country_code", + "type": "text", + "label": "Country Code" + } + ], + "type": "array", + "label": "Addresses" + }, + { + "name": "birthday", + "type": "text", + "label": "Birthday" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "sticker", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Sticker" + }, + { + "name": "location", + "spec": [ + { + "name": "latitude", + "type": "number", + "label": "Latitude" + }, + { + "name": "longitude", + "type": "number", + "label": "Longitude" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "address", + "type": "text", + "label": "Address" + } + ], + "type": "collection", + "label": "Location" + }, + { + "name": "context", + "spec": [ + { + "name": "from", + "type": "text", + "label": "From" + }, + { + "name": "id", + "type": "text", + "label": "Context ID" + } + ], + "type": "collection", + "label": "Context" + }, + { + "name": "button", + "spec": [ + { + "name": "payload", + "type": "text", + "label": "Payload" + }, + { + "name": "text", + "type": "text", + "label": "Text" + } + ], + "type": "collection", + "label": "Button" + }, + { + "name": "interactive", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "list_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + }, + { + "name": "description", + "type": "text", + "label": "Description" + } + ], + "type": "collection", + "label": "List Reply" + }, + { + "name": "button_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Button Reply" + } + ], + "type": "collection", + "label": "Interactive" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Messages" + } + ] + } + }, + { + "id": 6, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": 300, + "y": 150 + } + }, + "routes": [ + { + "flow": [ + { + "id": 2, + "module": "openai-gpt-3:messageAssistantAdvanced", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.messages[].type}}", + "b": "text", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "role": "user", + "message": "{{1.messages[].text.body}}", + "assistantId": "asst_qy8RinToeffHqSNJCjKH8d1L" + }, + "metadata": { + "designer": { + "x": 600, + "y": 0, + "name": "Ben AI Agent" + }, + "restore": { + "expect": { + "role": { + "label": "User" + }, + "model": { + "mode": "chose" + }, + "tools": { + "mode": "chose" + }, + "image_urls": { + "mode": "chose" + }, + "assistantId": { + "mode": "chose", + "label": "Ben AI (gpt-4o)", + "nested": [] + }, + "image_files": { + "mode": "chose" + }, + "tool_choice": { + "mode": "chose", + "label": "Empty" + }, + "response_format": { + "mode": "chose", + "label": "Empty" + }, + "truncation_strategy": { + "mode": "chose", + "label": "Empty" + }, + "file_search_resources": { + "mode": "chose" + }, + "code_interpreter_resources": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "assistantId", + "type": "select", + "label": "Assistant", + "required": true + }, + { + "name": "role", + "type": "select", + "label": "Role", + "required": true, + "validate": { + "enum": [ + "user", + "assistant" + ] + } + }, + { + "name": "threadId", + "type": "text", + "label": "Thread ID" + }, + { + "name": "model", + "type": "select", + "label": "Model" + }, + { + "name": "tools", + "type": "select", + "label": "Tools", + "multiple": true, + "validate": { + "enum": [ + "file_search", + "code_interpreter" + ] + } + }, + { + "name": "file_search_resources", + "type": "select", + "label": "File Search Resources" + }, + { + "name": "code_interpreter_resources", + "type": "select", + "label": "Code Interpreter Resources", + "multiple": true, + "validate": { + "maxItems": 20 + } + }, + { + "name": "tool_choice", + "type": "select", + "label": "Tool Choice", + "validate": { + "enum": [ + "none", + "auto", + "required", + "file_search", + "code_interpreter", + "function" + ] + } + }, + { + "name": "instructions", + "type": "text", + "label": "Instructions" + }, + { + "name": "max_prompt_tokens", + "type": "uinteger", + "label": "Max Prompt Tokens" + }, + { + "name": "max_completion_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "auto", + "json_object", + "text" + ] + } + }, + { + "name": "truncation_strategy", + "type": "select", + "label": "Truncation Strategy", + "validate": { + "enum": [ + "auto", + "last_messages" + ] + } + }, + { + "name": "message", + "type": "text", + "label": "Message", + "required": true + }, + { + "name": "image_files", + "type": "select", + "label": "Image Files", + "multiple": true + }, + { + "name": "image_urls", + "spec": { + "name": "value", + "type": "url", + "label": "Image URL", + "required": true + }, + "type": "array", + "label": "Image URLs" + } + ], + "advanced": true + } + }, + { + "id": 20, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "gpt-4o", + "top_p": "1", + "select": "chat", + "messages": [ + { + "role": "user", + "content": "You are an expert answer improver. Please look at the message below. This is a response to a user query. You have 1 main job:\n1. You will ALWAYS take out all the mentions of sources\n\nYou will ONLY output the transformed message without the sources below the message header, nothing else, no explanation.\n\n**Message:**\n{{2.result}}", + "imageDetail": "auto" + } + ], + "max_tokens": "2048", + "temperature": "1", + "n_completions": "1", + "response_format": "text" + }, + "metadata": { + "designer": { + "x": 900, + "y": 0 + }, + "restore": { + "expect": { + "stop": { + "mode": "chose" + }, + "model": { + "mode": "chose", + "label": "gpt-4o (system)" + }, + "select": { + "label": "Create a Chat Completion (GPT and o1 models)" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "User" + }, + "imageDetail": { + "mode": "chose", + "label": "Auto" + }, + "imageInputType": { + "mode": "chose", + "label": "Empty" + } + } + ] + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "additionalParameters": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "spec": { + "name": "value", + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability" + }, + "type": "array", + "label": "Token Probability" + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "spec": { + "name": "value", + "type": "text", + "label": "Stop Sequence" + }, + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + } + }, + { + "name": "additionalParameters", + "spec": { + "name": "value", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter" + }, + "type": "array", + "label": "Other Input Parameters" + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "max_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "messages", + "spec": { + "name": "value", + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": { + "store": [ + { + "label": "System", + "value": "system", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + }, + { + "label": "User", + "value": "user", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + }, + { + "name": "imageInputType", + "type": "select", + "label": "Image Input Type", + "options": [ + { + "label": "URL", + "value": "url", + "nested": [ + { + "help": "Make sure to use a publically accessible URL.\nYou can test if your image is publically accessible by opening the link in an incognito tab.", + "name": "imageUrl", + "type": "url", + "label": "Image URL" + } + ] + }, + { + "label": "Image File", + "value": "file", + "nested": [ + { + "name": "imageFile", + "spec": [ + { + "help": "Accepted extensions: `.jpg`, `.jpeg`, `.png`, `.webp` and `.gif`.", + "name": "imageFilename", + "type": "filename", + "label": "Image Filename", + "semantic": "file:name", + "extension": [ + "jpg", + "jpeg", + "png", + "webp", + "gif" + ] + }, + { + "name": "imageData", + "type": "buffer", + "label": "Image Data", + "semantic": "file:data" + } + ], + "type": "collection", + "label": "Image" + } + ] + } + ], + "mappable": false + }, + { + "name": "imageDetail", + "type": "select", + "label": "Image Detail", + "options": [ + { + "label": "Auto", + "value": "auto", + "default": true + }, + { + "label": "High", + "value": "high" + }, + { + "label": "Low", + "value": "low" + } + ], + "advanced": true + } + ] + }, + { + "label": "Assistant", + "value": "assistant", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + } + ] + }, + "required": true + } + ], + "type": "collection", + "label": "Message" + }, + "type": "array", + "label": "Messages", + "required": true + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + } + ], + "interface": [ + { + "name": "result", + "type": "any", + "label": "Result" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "created", + "type": "date", + "label": "Created" + }, + { + "name": "model", + "type": "text", + "label": "Model" + }, + { + "name": "choices", + "spec": { + "spec": [ + { + "name": "text", + "type": "text", + "label": "Text" + }, + { + "name": "index", + "type": "number", + "label": "Index" + }, + { + "name": "logprobs", + "type": "text", + "label": "Log Probs" + }, + { + "name": "finish_reason", + "type": "text", + "label": "Finish Reason" + }, + { + "name": "message", + "spec": [ + { + "name": "role", + "type": "text", + "label": "Role" + }, + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "refusal", + "type": "text", + "label": "Refusal" + } + ], + "type": "collection", + "label": "Message" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Choices" + }, + { + "name": "usage", + "spec": [ + { + "name": "prompt_tokens", + "type": "number", + "label": "Prompt Tokens" + }, + { + "name": "completion_tokens", + "type": "text", + "label": "Completion Tokens" + }, + { + "name": "total_tokens", + "type": "number", + "label": "Total Tokens" + }, + { + "name": "prompt_tokens_details", + "spec": [ + { + "name": "cached_tokens", + "type": "uinteger", + "label": "Cached Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "image_tokens", + "type": "uinteger", + "label": "Image Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Prompt Tokens Details" + }, + { + "name": "completion_tokens_details", + "spec": [ + { + "name": "reasoning_tokens", + "type": "uinteger", + "label": "Reasoning Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Completion Tokens Details" + } + ], + "type": "collection", + "label": "Usage" + }, + { + "name": "system_fingerprint", + "type": "text", + "label": "System Fingerprint" + } + ] + } + }, + { + "id": 3, + "module": "elevenlabs:createTextToSpeech", + "version": 1, + "parameters": { + "__IMTCONN__": 3705067 + }, + "mapper": { + "text": "{{20.result}}", + "model_id": "eleven_multilingual_v2", + "voice_id": "kdikibstKceOhzZ8HRSW", + "voice_settings": {} + }, + "metadata": { + "designer": { + "x": 1200, + "y": 0 + }, + "restore": { + "expect": { + "model_id": { + "mode": "chose", + "label": "Eleven Multilingual v2 (eleven_multilingual_v2)" + }, + "voice_id": { + "mode": "chose", + "label": "professional/Ben van Sprundel" + }, + "optimize_streaming_latency": { + "mode": "chose", + "label": "Empty" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "elevenlabs" + }, + "label": "My ElevenLabs connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:elevenlabs", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "voice_id", + "type": "select", + "label": "Voice", + "required": true + }, + { + "name": "model_id", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "text", + "type": "text", + "label": "Text", + "required": true + }, + { + "name": "voice_settings", + "spec": [ + { + "name": "stability", + "type": "number", + "label": "Stability", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "similarity_boost", + "type": "number", + "label": "Similarity Boost", + "validate": { + "max": 1, + "min": 0 + } + } + ], + "type": "collection", + "label": "Voice Settings" + }, + { + "name": "optimize_streaming_latency", + "type": "select", + "label": "Optimize Streaming Latency", + "validate": { + "enum": [ + "0", + "1", + "2", + "3", + "4" + ] + } + } + ] + } + }, + { + "id": 5, + "module": "whatsapp-business-cloud:uploadMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 3362228 + }, + "mapper": { + "data": "{{3.data}}", + "fromId": "278982118641623", + "filename": "{{3.fileName}}" + }, + "metadata": { + "designer": { + "x": 1500, + "y": 0 + }, + "restore": { + "expect": { + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "My WhatsApp Business Cloud connection (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "mode": "edit", + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "filename", + "type": "filename", + "label": "File name", + "required": true + }, + { + "name": "data", + "type": "buffer", + "label": "Data", + "required": true + } + ] + } + }, + { + "id": 4, + "module": "whatsapp-business-cloud:sendMessage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "mapper": { + "to": "{{1.messages[].from}}", + "type": "audio", + "audio": { + "id": "{{5.id}}" + }, + "fromId": "278982118641623" + }, + "metadata": { + "designer": { + "x": 1800, + "y": 0 + }, + "restore": { + "expect": { + "type": { + "label": "Audio" + }, + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "to", + "type": "text", + "label": "Receiver", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Message Type", + "required": true, + "validate": { + "enum": [ + "text", + "image", + "audio", + "video", + "document", + "sticker", + "location", + "contacts", + "interactive" + ] + } + }, + { + "name": "audio", + "spec": [ + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "link", + "type": "url", + "label": "Media URL" + } + ], + "type": "collection", + "label": "Audio" + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 7, + "module": "whatsapp-business-cloud:getMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.messages[].type}}", + "b": "audio", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "mediaId": "{{1.messages[].audio.id}}" + }, + "metadata": { + "designer": { + "x": 600, + "y": 300 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "mediaId", + "type": "text", + "label": "Media ID", + "required": true + } + ] + } + }, + { + "id": 18, + "module": "openai-gpt-3:CreateTranslation", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.messages[].type}}", + "b": "audio", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "model": "whisper-1", + "fileData": "{{7.mediaData}}", + "fileName": "{{7.mediaName}}", + "response_format": "text" + }, + "metadata": { + "designer": { + "x": 900, + "y": 300, + "name": "Speech to text" + }, + "restore": { + "expect": { + "model": { + "mode": "chose", + "label": "Whisper-1" + }, + "response_format": { + "mode": "chose", + "label": "Text" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "filename", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "prompt", + "type": "text", + "label": "Prompt" + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "json", + "text", + "srt", + "verbose_json", + "vtt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 1, + "min": 0 + } + } + ], + "interface": [ + { + "name": "text", + "type": "text", + "label": "Text" + } + ] + } + }, + { + "id": 9, + "module": "openai-gpt-3:messageAssistantAdvanced", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "role": "user", + "message": "{{18.text}}", + "assistantId": "asst_qy8RinToeffHqSNJCjKH8d1L" + }, + "metadata": { + "designer": { + "x": 1200, + "y": 300, + "name": "Ben AI Agent" + }, + "restore": { + "expect": { + "role": { + "label": "User" + }, + "model": { + "mode": "chose" + }, + "tools": { + "mode": "chose" + }, + "image_urls": { + "mode": "chose" + }, + "assistantId": { + "mode": "chose", + "label": "Ben AI (gpt-4o)", + "nested": [] + }, + "image_files": { + "mode": "chose" + }, + "tool_choice": { + "mode": "chose", + "label": "Empty" + }, + "response_format": { + "mode": "chose", + "label": "Empty" + }, + "truncation_strategy": { + "mode": "chose", + "label": "Empty" + }, + "file_search_resources": { + "mode": "chose" + }, + "code_interpreter_resources": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "assistantId", + "type": "select", + "label": "Assistant", + "required": true + }, + { + "name": "role", + "type": "select", + "label": "Role", + "required": true, + "validate": { + "enum": [ + "user", + "assistant" + ] + } + }, + { + "name": "threadId", + "type": "text", + "label": "Thread ID" + }, + { + "name": "model", + "type": "select", + "label": "Model" + }, + { + "name": "tools", + "type": "select", + "label": "Tools", + "multiple": true, + "validate": { + "enum": [ + "file_search", + "code_interpreter" + ] + } + }, + { + "name": "file_search_resources", + "type": "select", + "label": "File Search Resources" + }, + { + "name": "code_interpreter_resources", + "type": "select", + "label": "Code Interpreter Resources", + "multiple": true, + "validate": { + "maxItems": 20 + } + }, + { + "name": "tool_choice", + "type": "select", + "label": "Tool Choice", + "validate": { + "enum": [ + "none", + "auto", + "required", + "file_search", + "code_interpreter", + "function" + ] + } + }, + { + "name": "instructions", + "type": "text", + "label": "Instructions" + }, + { + "name": "max_prompt_tokens", + "type": "uinteger", + "label": "Max Prompt Tokens" + }, + { + "name": "max_completion_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "auto", + "json_object", + "text" + ] + } + }, + { + "name": "truncation_strategy", + "type": "select", + "label": "Truncation Strategy", + "validate": { + "enum": [ + "auto", + "last_messages" + ] + } + }, + { + "name": "message", + "type": "text", + "label": "Message", + "required": true + }, + { + "name": "image_files", + "type": "select", + "label": "Image Files", + "multiple": true + }, + { + "name": "image_urls", + "spec": { + "name": "value", + "type": "url", + "label": "Image URL", + "required": true + }, + "type": "array", + "label": "Image URLs" + } + ] + } + }, + { + "id": 19, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "gpt-4o", + "top_p": "1", + "select": "chat", + "messages": [ + { + "role": "user", + "content": "You are an expert answer improver. Please look at the message below. This is a response to a user query. You have 1 main job:\n1. You will ALWAYS take out all the mentions of sources\n\nYou will ONLY output the transformed message without the sources below the message header, nothing else, no explanation.\n\n**Message:**\n{{9.result}}", + "imageDetail": "auto" + } + ], + "max_tokens": "2048", + "temperature": "1", + "n_completions": "1", + "response_format": "text" + }, + "metadata": { + "designer": { + "x": 1500, + "y": 300 + }, + "restore": { + "expect": { + "stop": { + "mode": "chose" + }, + "model": { + "mode": "chose", + "label": "gpt-4o (system)" + }, + "select": { + "label": "Create a Chat Completion (GPT and o1 models)" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "User" + }, + "imageDetail": { + "mode": "chose", + "label": "Auto" + }, + "imageInputType": { + "mode": "chose", + "label": "Empty" + } + } + ] + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "additionalParameters": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "spec": { + "name": "value", + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability" + }, + "type": "array", + "label": "Token Probability" + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "spec": { + "name": "value", + "type": "text", + "label": "Stop Sequence" + }, + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + } + }, + { + "name": "additionalParameters", + "spec": { + "name": "value", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter" + }, + "type": "array", + "label": "Other Input Parameters" + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "max_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "messages", + "spec": { + "name": "value", + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": { + "store": [ + { + "label": "System", + "value": "system", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + }, + { + "label": "User", + "value": "user", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + }, + { + "name": "imageInputType", + "type": "select", + "label": "Image Input Type", + "options": [ + { + "label": "URL", + "value": "url", + "nested": [ + { + "help": "Make sure to use a publically accessible URL.\nYou can test if your image is publically accessible by opening the link in an incognito tab.", + "name": "imageUrl", + "type": "url", + "label": "Image URL" + } + ] + }, + { + "label": "Image File", + "value": "file", + "nested": [ + { + "name": "imageFile", + "spec": [ + { + "help": "Accepted extensions: `.jpg`, `.jpeg`, `.png`, `.webp` and `.gif`.", + "name": "imageFilename", + "type": "filename", + "label": "Image Filename", + "semantic": "file:name", + "extension": [ + "jpg", + "jpeg", + "png", + "webp", + "gif" + ] + }, + { + "name": "imageData", + "type": "buffer", + "label": "Image Data", + "semantic": "file:data" + } + ], + "type": "collection", + "label": "Image" + } + ] + } + ], + "mappable": false + }, + { + "name": "imageDetail", + "type": "select", + "label": "Image Detail", + "options": [ + { + "label": "Auto", + "value": "auto", + "default": true + }, + { + "label": "High", + "value": "high" + }, + { + "label": "Low", + "value": "low" + } + ], + "advanced": true + } + ] + }, + { + "label": "Assistant", + "value": "assistant", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + } + ] + }, + "required": true + } + ], + "type": "collection", + "label": "Message" + }, + "type": "array", + "label": "Messages", + "required": true + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + } + ], + "interface": [ + { + "name": "result", + "type": "any", + "label": "Result" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "created", + "type": "date", + "label": "Created" + }, + { + "name": "model", + "type": "text", + "label": "Model" + }, + { + "name": "choices", + "spec": { + "spec": [ + { + "name": "text", + "type": "text", + "label": "Text" + }, + { + "name": "index", + "type": "number", + "label": "Index" + }, + { + "name": "logprobs", + "type": "text", + "label": "Log Probs" + }, + { + "name": "finish_reason", + "type": "text", + "label": "Finish Reason" + }, + { + "name": "message", + "spec": [ + { + "name": "role", + "type": "text", + "label": "Role" + }, + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "refusal", + "type": "text", + "label": "Refusal" + } + ], + "type": "collection", + "label": "Message" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Choices" + }, + { + "name": "usage", + "spec": [ + { + "name": "prompt_tokens", + "type": "number", + "label": "Prompt Tokens" + }, + { + "name": "completion_tokens", + "type": "text", + "label": "Completion Tokens" + }, + { + "name": "total_tokens", + "type": "number", + "label": "Total Tokens" + }, + { + "name": "prompt_tokens_details", + "spec": [ + { + "name": "cached_tokens", + "type": "uinteger", + "label": "Cached Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "image_tokens", + "type": "uinteger", + "label": "Image Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Prompt Tokens Details" + }, + { + "name": "completion_tokens_details", + "spec": [ + { + "name": "reasoning_tokens", + "type": "uinteger", + "label": "Reasoning Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Completion Tokens Details" + } + ], + "type": "collection", + "label": "Usage" + }, + { + "name": "system_fingerprint", + "type": "text", + "label": "System Fingerprint" + } + ] + } + }, + { + "id": 10, + "module": "elevenlabs:createTextToSpeech", + "version": 1, + "parameters": { + "__IMTCONN__": 3705067 + }, + "mapper": { + "text": "{{19.result}}", + "model_id": "eleven_multilingual_v2", + "voice_id": "kdikibstKceOhzZ8HRSW", + "voice_settings": {} + }, + "metadata": { + "designer": { + "x": 1800, + "y": 300 + }, + "restore": { + "expect": { + "model_id": { + "mode": "chose", + "label": "Eleven Multilingual v2 (eleven_multilingual_v2)" + }, + "voice_id": { + "mode": "chose", + "label": "professional/Ben van Sprundel" + }, + "optimize_streaming_latency": { + "mode": "chose", + "label": "Empty" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "elevenlabs" + }, + "label": "My ElevenLabs connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:elevenlabs", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "voice_id", + "type": "select", + "label": "Voice", + "required": true + }, + { + "name": "model_id", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "text", + "type": "text", + "label": "Text", + "required": true + }, + { + "name": "voice_settings", + "spec": [ + { + "name": "stability", + "type": "number", + "label": "Stability", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "similarity_boost", + "type": "number", + "label": "Similarity Boost", + "validate": { + "max": 1, + "min": 0 + } + } + ], + "type": "collection", + "label": "Voice Settings" + }, + { + "name": "optimize_streaming_latency", + "type": "select", + "label": "Optimize Streaming Latency", + "validate": { + "enum": [ + "0", + "1", + "2", + "3", + "4" + ] + } + } + ] + } + }, + { + "id": 11, + "module": "whatsapp-business-cloud:uploadMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 3362228 + }, + "mapper": { + "data": "{{10.data}}", + "fromId": "278982118641623", + "filename": "{{10.fileName}}" + }, + "metadata": { + "designer": { + "x": 2100, + "y": 300 + }, + "restore": { + "expect": { + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "My WhatsApp Business Cloud connection (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "mode": "edit", + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "filename", + "type": "filename", + "label": "File name", + "required": true + }, + { + "name": "data", + "type": "buffer", + "label": "Data", + "required": true + } + ] + } + }, + { + "id": 12, + "module": "whatsapp-business-cloud:sendMessage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "mapper": { + "to": "{{1.messages[].from}}", + "type": "audio", + "audio": { + "id": "{{11.id}}" + }, + "fromId": "278982118641623" + }, + "metadata": { + "designer": { + "x": 2400, + "y": 300 + }, + "restore": { + "expect": { + "type": { + "label": "Audio" + }, + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "to", + "type": "text", + "label": "Receiver", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Message Type", + "required": true, + "validate": { + "enum": [ + "text", + "image", + "audio", + "video", + "document", + "sticker", + "location", + "contacts", + "interactive" + ] + } + }, + { + "name": "audio", + "spec": [ + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "link", + "type": "url", + "label": "Media URL" + } + ], + "type": "collection", + "label": "Audio" + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com Whatsapp Blueprint.json b/backend/data/Make.com Whatsapp Blueprint.json new file mode 100644 index 0000000000000000000000000000000000000000..98c5a853487b68aaae31750b78c6b0781a6ab560 --- /dev/null +++ b/backend/data/Make.com Whatsapp Blueprint.json @@ -0,0 +1,2965 @@ +{ + "name": "Ben AI Clone", + "flow": [ + { + "id": 1, + "module": "whatsapp-business-cloud:watchEvents", + "version": 1, + "parameters": { + "__IMTHOOK__": 1916561 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 150 + }, + "restore": { + "parameters": { + "__IMTHOOK__": { + "data": { + "editable": "false" + }, + "label": "Ben AI" + } + } + }, + "parameters": [ + { + "name": "__IMTHOOK__", + "type": "hook:whatsapp-business-cloud2", + "label": "Webhook", + "required": true + } + ], + "interface": [ + { + "name": "id", + "type": "text", + "label": "WhatsApp Business Account ID" + }, + { + "name": "time", + "type": "date", + "label": "Time" + }, + { + "name": "field", + "type": "text", + "label": "Field" + }, + { + "name": "messaging_product", + "type": "text", + "label": "Messaging Product" + }, + { + "name": "metadata", + "spec": [ + { + "name": "display_phone_number", + "type": "text", + "label": "Display Phone Number" + }, + { + "name": "phone_number_id", + "type": "text", + "label": "Phone Number ID" + } + ], + "type": "collection", + "label": "Metadata" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "profile", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection", + "label": "Profile" + }, + { + "name": "wa_id", + "type": "text", + "label": "WhatsApp ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "messages", + "spec": { + "spec": [ + { + "name": "from", + "type": "text", + "label": "Sender" + }, + { + "name": "id", + "type": "text", + "label": "Message ID" + }, + { + "name": "timestamp", + "type": "date", + "label": "Timestamp" + }, + { + "name": "text", + "spec": [ + { + "name": "body", + "type": "text", + "label": "Body" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "image", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Image" + }, + { + "name": "audio", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "voice", + "type": "boolean", + "label": "Voice" + } + ], + "type": "collection", + "label": "Audio" + }, + { + "name": "video", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Video" + }, + { + "name": "document", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "filename", + "type": "text", + "label": "File Name" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Document" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "name", + "spec": [ + { + "name": "formatted_name", + "type": "text", + "label": "Formatted Name" + }, + { + "name": "first_name", + "type": "text", + "label": "First Name" + }, + { + "name": "last_name", + "type": "text", + "label": "Last Name" + }, + { + "name": "middle_name", + "type": "text", + "label": "Middle Name" + }, + { + "name": "suffix", + "type": "text", + "label": "Name Suffix" + }, + { + "name": "prefix", + "type": "text", + "label": "Name Prefix" + } + ], + "type": "collection", + "label": "Name" + }, + { + "name": "phones", + "spec": [ + { + "name": "phone", + "type": "text", + "label": "Phone" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Phones" + }, + { + "name": "emails", + "spec": [ + { + "name": "email", + "type": "email", + "label": "Email" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Emails" + }, + { + "name": "org", + "spec": [ + { + "name": "company", + "type": "text", + "label": "Company" + }, + { + "name": "department", + "type": "text", + "label": "Department" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Organization" + }, + { + "name": "urls", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "url", + "type": "url", + "label": "URL" + } + ], + "type": "array", + "label": "URLs" + }, + { + "name": "addresses", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "street", + "type": "text", + "label": "Street" + }, + { + "name": "city", + "type": "text", + "label": "City" + }, + { + "name": "zip", + "type": "text", + "label": "ZIP" + }, + { + "name": "country", + "type": "text", + "label": "Country" + }, + { + "name": "country_code", + "type": "text", + "label": "Country Code" + } + ], + "type": "array", + "label": "Addresses" + }, + { + "name": "birthday", + "type": "text", + "label": "Birthday" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "sticker", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Sticker" + }, + { + "name": "location", + "spec": [ + { + "name": "latitude", + "type": "number", + "label": "Latitude" + }, + { + "name": "longitude", + "type": "number", + "label": "Longitude" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "address", + "type": "text", + "label": "Address" + } + ], + "type": "collection", + "label": "Location" + }, + { + "name": "context", + "spec": [ + { + "name": "from", + "type": "text", + "label": "From" + }, + { + "name": "id", + "type": "text", + "label": "Context ID" + } + ], + "type": "collection", + "label": "Context" + }, + { + "name": "button", + "spec": [ + { + "name": "payload", + "type": "text", + "label": "Payload" + }, + { + "name": "text", + "type": "text", + "label": "Text" + } + ], + "type": "collection", + "label": "Button" + }, + { + "name": "interactive", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "list_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + }, + { + "name": "description", + "type": "text", + "label": "Description" + } + ], + "type": "collection", + "label": "List Reply" + }, + { + "name": "button_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Button Reply" + } + ], + "type": "collection", + "label": "Interactive" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Messages" + } + ] + } + }, + { + "id": 6, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": 300, + "y": 150 + } + }, + "routes": [ + { + "flow": [ + { + "id": 2, + "module": "openai-gpt-3:messageAssistantAdvanced", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.messages[].type}}", + "b": "text", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "role": "user", + "message": "{{1.messages[].text.body}}", + "assistantId": "asst_qy8RinToeffHqSNJCjKH8d1L" + }, + "metadata": { + "designer": { + "x": 600, + "y": 0, + "name": "Ben AI Agent" + }, + "restore": { + "expect": { + "role": { + "label": "User" + }, + "model": { + "mode": "chose" + }, + "tools": { + "mode": "chose" + }, + "image_urls": { + "mode": "chose" + }, + "assistantId": { + "mode": "chose", + "label": "Ben AI (gpt-4o)", + "nested": [] + }, + "image_files": { + "mode": "chose" + }, + "tool_choice": { + "mode": "chose", + "label": "Empty" + }, + "response_format": { + "mode": "chose", + "label": "Empty" + }, + "truncation_strategy": { + "mode": "chose", + "label": "Empty" + }, + "file_search_resources": { + "mode": "chose" + }, + "code_interpreter_resources": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "assistantId", + "type": "select", + "label": "Assistant", + "required": true + }, + { + "name": "role", + "type": "select", + "label": "Role", + "required": true, + "validate": { + "enum": [ + "user", + "assistant" + ] + } + }, + { + "name": "threadId", + "type": "text", + "label": "Thread ID" + }, + { + "name": "model", + "type": "select", + "label": "Model" + }, + { + "name": "tools", + "type": "select", + "label": "Tools", + "multiple": true, + "validate": { + "enum": [ + "file_search", + "code_interpreter" + ] + } + }, + { + "name": "file_search_resources", + "type": "select", + "label": "File Search Resources" + }, + { + "name": "code_interpreter_resources", + "type": "select", + "label": "Code Interpreter Resources", + "multiple": true, + "validate": { + "maxItems": 20 + } + }, + { + "name": "tool_choice", + "type": "select", + "label": "Tool Choice", + "validate": { + "enum": [ + "none", + "auto", + "required", + "file_search", + "code_interpreter", + "function" + ] + } + }, + { + "name": "instructions", + "type": "text", + "label": "Instructions" + }, + { + "name": "max_prompt_tokens", + "type": "uinteger", + "label": "Max Prompt Tokens" + }, + { + "name": "max_completion_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "auto", + "json_object", + "text" + ] + } + }, + { + "name": "truncation_strategy", + "type": "select", + "label": "Truncation Strategy", + "validate": { + "enum": [ + "auto", + "last_messages" + ] + } + }, + { + "name": "message", + "type": "text", + "label": "Message", + "required": true + }, + { + "name": "image_files", + "type": "select", + "label": "Image Files", + "multiple": true + }, + { + "name": "image_urls", + "spec": { + "name": "value", + "type": "url", + "label": "Image URL", + "required": true + }, + "type": "array", + "label": "Image URLs" + } + ], + "advanced": true + } + }, + { + "id": 20, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "gpt-4o", + "top_p": "1", + "select": "chat", + "messages": [ + { + "role": "user", + "content": "You are an expert answer improver. Please look at the message below. This is a response to a user query. You have 1 main job:\n1. You will ALWAYS take out all the mentions of sources\n\nYou will ONLY output the transformed message without the sources below the message header, nothing else, no explanation.\n\n**Message:**\n{{2.result}}", + "imageDetail": "auto" + } + ], + "max_tokens": "2048", + "temperature": "1", + "n_completions": "1", + "response_format": "text" + }, + "metadata": { + "designer": { + "x": 900, + "y": 0 + }, + "restore": { + "expect": { + "stop": { + "mode": "chose" + }, + "model": { + "mode": "chose", + "label": "gpt-4o (system)" + }, + "select": { + "label": "Create a Chat Completion (GPT and o1 models)" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "User" + }, + "imageDetail": { + "mode": "chose", + "label": "Auto" + }, + "imageInputType": { + "mode": "chose", + "label": "Empty" + } + } + ] + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "additionalParameters": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "spec": { + "name": "value", + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability" + }, + "type": "array", + "label": "Token Probability" + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "spec": { + "name": "value", + "type": "text", + "label": "Stop Sequence" + }, + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + } + }, + { + "name": "additionalParameters", + "spec": { + "name": "value", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter" + }, + "type": "array", + "label": "Other Input Parameters" + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "max_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "messages", + "spec": { + "name": "value", + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": { + "store": [ + { + "label": "System", + "value": "system", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + }, + { + "label": "User", + "value": "user", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + }, + { + "name": "imageInputType", + "type": "select", + "label": "Image Input Type", + "options": [ + { + "label": "URL", + "value": "url", + "nested": [ + { + "help": "Make sure to use a publically accessible URL.\nYou can test if your image is publically accessible by opening the link in an incognito tab.", + "name": "imageUrl", + "type": "url", + "label": "Image URL" + } + ] + }, + { + "label": "Image File", + "value": "file", + "nested": [ + { + "name": "imageFile", + "spec": [ + { + "help": "Accepted extensions: `.jpg`, `.jpeg`, `.png`, `.webp` and `.gif`.", + "name": "imageFilename", + "type": "filename", + "label": "Image Filename", + "semantic": "file:name", + "extension": [ + "jpg", + "jpeg", + "png", + "webp", + "gif" + ] + }, + { + "name": "imageData", + "type": "buffer", + "label": "Image Data", + "semantic": "file:data" + } + ], + "type": "collection", + "label": "Image" + } + ] + } + ], + "mappable": false + }, + { + "name": "imageDetail", + "type": "select", + "label": "Image Detail", + "options": [ + { + "label": "Auto", + "value": "auto", + "default": true + }, + { + "label": "High", + "value": "high" + }, + { + "label": "Low", + "value": "low" + } + ], + "advanced": true + } + ] + }, + { + "label": "Assistant", + "value": "assistant", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + } + ] + }, + "required": true + } + ], + "type": "collection", + "label": "Message" + }, + "type": "array", + "label": "Messages", + "required": true + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + } + ], + "interface": [ + { + "name": "result", + "type": "any", + "label": "Result" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "created", + "type": "date", + "label": "Created" + }, + { + "name": "model", + "type": "text", + "label": "Model" + }, + { + "name": "choices", + "spec": { + "spec": [ + { + "name": "text", + "type": "text", + "label": "Text" + }, + { + "name": "index", + "type": "number", + "label": "Index" + }, + { + "name": "logprobs", + "type": "text", + "label": "Log Probs" + }, + { + "name": "finish_reason", + "type": "text", + "label": "Finish Reason" + }, + { + "name": "message", + "spec": [ + { + "name": "role", + "type": "text", + "label": "Role" + }, + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "refusal", + "type": "text", + "label": "Refusal" + } + ], + "type": "collection", + "label": "Message" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Choices" + }, + { + "name": "usage", + "spec": [ + { + "name": "prompt_tokens", + "type": "number", + "label": "Prompt Tokens" + }, + { + "name": "completion_tokens", + "type": "text", + "label": "Completion Tokens" + }, + { + "name": "total_tokens", + "type": "number", + "label": "Total Tokens" + }, + { + "name": "prompt_tokens_details", + "spec": [ + { + "name": "cached_tokens", + "type": "uinteger", + "label": "Cached Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "image_tokens", + "type": "uinteger", + "label": "Image Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Prompt Tokens Details" + }, + { + "name": "completion_tokens_details", + "spec": [ + { + "name": "reasoning_tokens", + "type": "uinteger", + "label": "Reasoning Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Completion Tokens Details" + } + ], + "type": "collection", + "label": "Usage" + }, + { + "name": "system_fingerprint", + "type": "text", + "label": "System Fingerprint" + } + ] + } + }, + { + "id": 3, + "module": "elevenlabs:createTextToSpeech", + "version": 1, + "parameters": { + "__IMTCONN__": 3705067 + }, + "mapper": { + "text": "{{20.result}}", + "model_id": "eleven_multilingual_v2", + "voice_id": "kdikibstKceOhzZ8HRSW", + "voice_settings": {} + }, + "metadata": { + "designer": { + "x": 1200, + "y": 0 + }, + "restore": { + "expect": { + "model_id": { + "mode": "chose", + "label": "Eleven Multilingual v2 (eleven_multilingual_v2)" + }, + "voice_id": { + "mode": "chose", + "label": "professional/Ben van Sprundel" + }, + "optimize_streaming_latency": { + "mode": "chose", + "label": "Empty" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "elevenlabs" + }, + "label": "My ElevenLabs connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:elevenlabs", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "voice_id", + "type": "select", + "label": "Voice", + "required": true + }, + { + "name": "model_id", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "text", + "type": "text", + "label": "Text", + "required": true + }, + { + "name": "voice_settings", + "spec": [ + { + "name": "stability", + "type": "number", + "label": "Stability", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "similarity_boost", + "type": "number", + "label": "Similarity Boost", + "validate": { + "max": 1, + "min": 0 + } + } + ], + "type": "collection", + "label": "Voice Settings" + }, + { + "name": "optimize_streaming_latency", + "type": "select", + "label": "Optimize Streaming Latency", + "validate": { + "enum": [ + "0", + "1", + "2", + "3", + "4" + ] + } + } + ] + } + }, + { + "id": 5, + "module": "whatsapp-business-cloud:uploadMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 3362228 + }, + "mapper": { + "data": "{{3.data}}", + "fromId": "278982118641623", + "filename": "{{3.fileName}}" + }, + "metadata": { + "designer": { + "x": 1500, + "y": 0 + }, + "restore": { + "expect": { + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "My WhatsApp Business Cloud connection (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "mode": "edit", + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "filename", + "type": "filename", + "label": "File name", + "required": true + }, + { + "name": "data", + "type": "buffer", + "label": "Data", + "required": true + } + ] + } + }, + { + "id": 4, + "module": "whatsapp-business-cloud:sendMessage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "mapper": { + "to": "{{1.messages[].from}}", + "type": "audio", + "audio": { + "id": "{{5.id}}" + }, + "fromId": "278982118641623" + }, + "metadata": { + "designer": { + "x": 1800, + "y": 0 + }, + "restore": { + "expect": { + "type": { + "label": "Audio" + }, + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "to", + "type": "text", + "label": "Receiver", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Message Type", + "required": true, + "validate": { + "enum": [ + "text", + "image", + "audio", + "video", + "document", + "sticker", + "location", + "contacts", + "interactive" + ] + } + }, + { + "name": "audio", + "spec": [ + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "link", + "type": "url", + "label": "Media URL" + } + ], + "type": "collection", + "label": "Audio" + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 7, + "module": "whatsapp-business-cloud:getMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.messages[].type}}", + "b": "audio", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "mediaId": "{{1.messages[].audio.id}}" + }, + "metadata": { + "designer": { + "x": 600, + "y": 300 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "mediaId", + "type": "text", + "label": "Media ID", + "required": true + } + ] + } + }, + { + "id": 18, + "module": "openai-gpt-3:CreateTranslation", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.messages[].type}}", + "b": "audio", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "model": "whisper-1", + "fileData": "{{7.mediaData}}", + "fileName": "{{7.mediaName}}", + "response_format": "text" + }, + "metadata": { + "designer": { + "x": 900, + "y": 300, + "name": "Speech to text" + }, + "restore": { + "expect": { + "model": { + "mode": "chose", + "label": "Whisper-1" + }, + "response_format": { + "mode": "chose", + "label": "Text" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "filename", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "prompt", + "type": "text", + "label": "Prompt" + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "json", + "text", + "srt", + "verbose_json", + "vtt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 1, + "min": 0 + } + } + ], + "interface": [ + { + "name": "text", + "type": "text", + "label": "Text" + } + ] + } + }, + { + "id": 9, + "module": "openai-gpt-3:messageAssistantAdvanced", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "role": "user", + "message": "{{18.text}}", + "assistantId": "asst_qy8RinToeffHqSNJCjKH8d1L" + }, + "metadata": { + "designer": { + "x": 1200, + "y": 300, + "name": "Ben AI Agent" + }, + "restore": { + "expect": { + "role": { + "label": "User" + }, + "model": { + "mode": "chose" + }, + "tools": { + "mode": "chose" + }, + "image_urls": { + "mode": "chose" + }, + "assistantId": { + "mode": "chose", + "label": "Ben AI (gpt-4o)", + "nested": [] + }, + "image_files": { + "mode": "chose" + }, + "tool_choice": { + "mode": "chose", + "label": "Empty" + }, + "response_format": { + "mode": "chose", + "label": "Empty" + }, + "truncation_strategy": { + "mode": "chose", + "label": "Empty" + }, + "file_search_resources": { + "mode": "chose" + }, + "code_interpreter_resources": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "assistantId", + "type": "select", + "label": "Assistant", + "required": true + }, + { + "name": "role", + "type": "select", + "label": "Role", + "required": true, + "validate": { + "enum": [ + "user", + "assistant" + ] + } + }, + { + "name": "threadId", + "type": "text", + "label": "Thread ID" + }, + { + "name": "model", + "type": "select", + "label": "Model" + }, + { + "name": "tools", + "type": "select", + "label": "Tools", + "multiple": true, + "validate": { + "enum": [ + "file_search", + "code_interpreter" + ] + } + }, + { + "name": "file_search_resources", + "type": "select", + "label": "File Search Resources" + }, + { + "name": "code_interpreter_resources", + "type": "select", + "label": "Code Interpreter Resources", + "multiple": true, + "validate": { + "maxItems": 20 + } + }, + { + "name": "tool_choice", + "type": "select", + "label": "Tool Choice", + "validate": { + "enum": [ + "none", + "auto", + "required", + "file_search", + "code_interpreter", + "function" + ] + } + }, + { + "name": "instructions", + "type": "text", + "label": "Instructions" + }, + { + "name": "max_prompt_tokens", + "type": "uinteger", + "label": "Max Prompt Tokens" + }, + { + "name": "max_completion_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "auto", + "json_object", + "text" + ] + } + }, + { + "name": "truncation_strategy", + "type": "select", + "label": "Truncation Strategy", + "validate": { + "enum": [ + "auto", + "last_messages" + ] + } + }, + { + "name": "message", + "type": "text", + "label": "Message", + "required": true + }, + { + "name": "image_files", + "type": "select", + "label": "Image Files", + "multiple": true + }, + { + "name": "image_urls", + "spec": { + "name": "value", + "type": "url", + "label": "Image URL", + "required": true + }, + "type": "array", + "label": "Image URLs" + } + ] + } + }, + { + "id": 19, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "gpt-4o", + "top_p": "1", + "select": "chat", + "messages": [ + { + "role": "user", + "content": "You are an expert answer improver. Please look at the message below. This is a response to a user query. You have 1 main job:\n1. You will ALWAYS take out all the mentions of sources\n\nYou will ONLY output the transformed message without the sources below the message header, nothing else, no explanation.\n\n**Message:**\n{{9.result}}", + "imageDetail": "auto" + } + ], + "max_tokens": "2048", + "temperature": "1", + "n_completions": "1", + "response_format": "text" + }, + "metadata": { + "designer": { + "x": 1500, + "y": 300 + }, + "restore": { + "expect": { + "stop": { + "mode": "chose" + }, + "model": { + "mode": "chose", + "label": "gpt-4o (system)" + }, + "select": { + "label": "Create a Chat Completion (GPT and o1 models)" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "User" + }, + "imageDetail": { + "mode": "chose", + "label": "Auto" + }, + "imageInputType": { + "mode": "chose", + "label": "Empty" + } + } + ] + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "additionalParameters": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "spec": { + "name": "value", + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability" + }, + "type": "array", + "label": "Token Probability" + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "spec": { + "name": "value", + "type": "text", + "label": "Stop Sequence" + }, + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + } + }, + { + "name": "additionalParameters", + "spec": { + "name": "value", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter" + }, + "type": "array", + "label": "Other Input Parameters" + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "max_tokens", + "type": "uinteger", + "label": "Max Completion Tokens" + }, + { + "name": "messages", + "spec": { + "name": "value", + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": { + "store": [ + { + "label": "System", + "value": "system", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + }, + { + "label": "User", + "value": "user", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + }, + { + "name": "imageInputType", + "type": "select", + "label": "Image Input Type", + "options": [ + { + "label": "URL", + "value": "url", + "nested": [ + { + "help": "Make sure to use a publically accessible URL.\nYou can test if your image is publically accessible by opening the link in an incognito tab.", + "name": "imageUrl", + "type": "url", + "label": "Image URL" + } + ] + }, + { + "label": "Image File", + "value": "file", + "nested": [ + { + "name": "imageFile", + "spec": [ + { + "help": "Accepted extensions: `.jpg`, `.jpeg`, `.png`, `.webp` and `.gif`.", + "name": "imageFilename", + "type": "filename", + "label": "Image Filename", + "semantic": "file:name", + "extension": [ + "jpg", + "jpeg", + "png", + "webp", + "gif" + ] + }, + { + "name": "imageData", + "type": "buffer", + "label": "Image Data", + "semantic": "file:data" + } + ], + "type": "collection", + "label": "Image" + } + ] + } + ], + "mappable": false + }, + { + "name": "imageDetail", + "type": "select", + "label": "Image Detail", + "options": [ + { + "label": "Auto", + "value": "auto", + "default": true + }, + { + "label": "High", + "value": "high" + }, + { + "label": "Low", + "value": "low" + } + ], + "advanced": true + } + ] + }, + { + "label": "Assistant", + "value": "assistant", + "nested": [ + { + "help": "Text content of the message on behalf of the selected __Role__.", + "name": "content", + "type": "text", + "label": "Text Content" + } + ] + } + ] + }, + "required": true + } + ], + "type": "collection", + "label": "Message" + }, + "type": "array", + "label": "Messages", + "required": true + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + } + ], + "interface": [ + { + "name": "result", + "type": "any", + "label": "Result" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "created", + "type": "date", + "label": "Created" + }, + { + "name": "model", + "type": "text", + "label": "Model" + }, + { + "name": "choices", + "spec": { + "spec": [ + { + "name": "text", + "type": "text", + "label": "Text" + }, + { + "name": "index", + "type": "number", + "label": "Index" + }, + { + "name": "logprobs", + "type": "text", + "label": "Log Probs" + }, + { + "name": "finish_reason", + "type": "text", + "label": "Finish Reason" + }, + { + "name": "message", + "spec": [ + { + "name": "role", + "type": "text", + "label": "Role" + }, + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "refusal", + "type": "text", + "label": "Refusal" + } + ], + "type": "collection", + "label": "Message" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Choices" + }, + { + "name": "usage", + "spec": [ + { + "name": "prompt_tokens", + "type": "number", + "label": "Prompt Tokens" + }, + { + "name": "completion_tokens", + "type": "text", + "label": "Completion Tokens" + }, + { + "name": "total_tokens", + "type": "number", + "label": "Total Tokens" + }, + { + "name": "prompt_tokens_details", + "spec": [ + { + "name": "cached_tokens", + "type": "uinteger", + "label": "Cached Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "image_tokens", + "type": "uinteger", + "label": "Image Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Prompt Tokens Details" + }, + { + "name": "completion_tokens_details", + "spec": [ + { + "name": "reasoning_tokens", + "type": "uinteger", + "label": "Reasoning Tokens" + }, + { + "name": "text_tokens", + "type": "uinteger", + "label": "Text Tokens" + }, + { + "name": "audio_tokens", + "type": "uinteger", + "label": "Audio Tokens" + } + ], + "type": "collection", + "label": "Completion Tokens Details" + } + ], + "type": "collection", + "label": "Usage" + }, + { + "name": "system_fingerprint", + "type": "text", + "label": "System Fingerprint" + } + ] + } + }, + { + "id": 10, + "module": "elevenlabs:createTextToSpeech", + "version": 1, + "parameters": { + "__IMTCONN__": 3705067 + }, + "mapper": { + "text": "{{19.result}}", + "model_id": "eleven_multilingual_v2", + "voice_id": "kdikibstKceOhzZ8HRSW", + "voice_settings": {} + }, + "metadata": { + "designer": { + "x": 1800, + "y": 300 + }, + "restore": { + "expect": { + "model_id": { + "mode": "chose", + "label": "Eleven Multilingual v2 (eleven_multilingual_v2)" + }, + "voice_id": { + "mode": "chose", + "label": "professional/Ben van Sprundel" + }, + "optimize_streaming_latency": { + "mode": "chose", + "label": "Empty" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "elevenlabs" + }, + "label": "My ElevenLabs connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:elevenlabs", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "voice_id", + "type": "select", + "label": "Voice", + "required": true + }, + { + "name": "model_id", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "text", + "type": "text", + "label": "Text", + "required": true + }, + { + "name": "voice_settings", + "spec": [ + { + "name": "stability", + "type": "number", + "label": "Stability", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "similarity_boost", + "type": "number", + "label": "Similarity Boost", + "validate": { + "max": 1, + "min": 0 + } + } + ], + "type": "collection", + "label": "Voice Settings" + }, + { + "name": "optimize_streaming_latency", + "type": "select", + "label": "Optimize Streaming Latency", + "validate": { + "enum": [ + "0", + "1", + "2", + "3", + "4" + ] + } + } + ] + } + }, + { + "id": 11, + "module": "whatsapp-business-cloud:uploadMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 3362228 + }, + "mapper": { + "data": "{{10.data}}", + "fromId": "278982118641623", + "filename": "{{10.fileName}}" + }, + "metadata": { + "designer": { + "x": 2100, + "y": 300 + }, + "restore": { + "expect": { + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "My WhatsApp Business Cloud connection (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "mode": "edit", + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "filename", + "type": "filename", + "label": "File name", + "required": true + }, + { + "name": "data", + "type": "buffer", + "label": "Data", + "required": true + } + ] + } + }, + { + "id": 12, + "module": "whatsapp-business-cloud:sendMessage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "mapper": { + "to": "{{1.messages[].from}}", + "type": "audio", + "audio": { + "id": "{{11.id}}" + }, + "fromId": "278982118641623" + }, + "metadata": { + "designer": { + "x": 2400, + "y": 300 + }, + "restore": { + "expect": { + "type": { + "label": "Audio" + }, + "fromId": { + "mode": "chose", + "label": "Ben Erik Van S Ltda (+55 11 91195-7545)" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "fromId", + "type": "select", + "label": "Sender ID", + "required": true + }, + { + "name": "to", + "type": "text", + "label": "Receiver", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Message Type", + "required": true, + "validate": { + "enum": [ + "text", + "image", + "audio", + "video", + "document", + "sticker", + "location", + "contacts", + "interactive" + ] + } + }, + { + "name": "audio", + "spec": [ + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "link", + "type": "url", + "label": "Media URL" + } + ], + "type": "collection", + "label": "Audio" + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com create events blueprint (1).json b/backend/data/Make.com create events blueprint (1).json new file mode 100644 index 0000000000000000000000000000000000000000..744f17c80341d8bb798127e7bf1d9b5bbfa77aaf --- /dev/null +++ b/backend/data/Make.com create events blueprint (1).json @@ -0,0 +1,878 @@ +{ + "name": "Create Event", + "flow": [ + { + "id": 4, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1690201, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -306, + "y": -3 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Create an Event" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 11, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -6, + "y": -3 + } + }, + "routes": [ + { + "flow": [ + { + "id": 6, + "module": "builtin:BasicFeeder", + "version": 1, + "parameters": {}, + "filter": { + "name": "Email", + "conditions": [ + [ + { + "a": "{{4.invitees}}", + "b": "@", + "o": "text:contain" + } + ] + ] + }, + "mapper": { + "array": "{{split(4.invitees; \",\")}}" + }, + "metadata": { + "designer": { + "x": 335, + "y": -179 + }, + "restore": { + "expect": { + "array": { + "mode": "edit" + } + } + }, + "expect": [ + { + "mode": "edit", + "name": "array", + "spec": [], + "type": "array", + "label": "Array" + } + ] + } + }, + { + "id": 7, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 6, + "target": "5.attendees" + }, + "mapper": { + "email": "{{6.value}}", + "displayName": "" + }, + "metadata": { + "designer": { + "x": 598, + "y": -181 + }, + "restore": { + "extra": { + "feeder": { + "label": "Iterator [6]" + }, + "target": { + "label": "Attendees" + } + } + }, + "expect": [ + { + "name": "displayName", + "type": "text", + "label": "Name" + }, + { + "name": "email", + "type": "email", + "label": "Email", + "required": true + } + ] + } + }, + { + "id": 5, + "module": "google-calendar:createAnEvent", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "mapper": { + "start": "{{4.`Start Date`}}", + "select": "detail", + "summary": "{{4.`Event Name`}}", + "calendar": "ben@forcefactory-ai.com", + "duration": "{{4.Duration}}", + "attendees": "{{7.array}}", + "visibility": "default", + "allDayEvent": false, + "sendUpdates": "all", + "transparency": "opaque", + "conferenceDate": true, + "guestsCanModify": true + }, + "metadata": { + "designer": { + "x": 857, + "y": -202 + }, + "restore": { + "expect": { + "select": { + "label": "In Detail" + }, + "colorId": { + "mode": "chose" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "attendees": { + "mode": "edit" + }, + "overrides": { + "mode": "chose" + }, + "recurrence": { + "mode": "chose" + }, + "visibility": { + "mode": "chose", + "label": "Default" + }, + "allDayEvent": { + "mode": "chose" + }, + "attachments": { + "mode": "chose" + }, + "sendUpdates": { + "mode": "chose", + "label": "To All Guests" + }, + "transparency": { + "mode": "chose", + "label": "Busy" + }, + "conferenceDate": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Create an Event", + "required": true, + "validate": { + "enum": [ + "quick", + "detail" + ] + } + }, + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "colorId", + "type": "select", + "label": "Color" + }, + { + "name": "summary", + "type": "text", + "label": "Event Name", + "required": true + }, + { + "name": "allDayEvent", + "type": "boolean", + "label": "All Day Event", + "required": true + }, + { + "name": "start", + "time": true, + "type": "date", + "label": "Start Date", + "required": true + }, + { + "name": "end", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "duration", + "type": "time", + "label": "Duration" + }, + { + "name": "description", + "type": "text", + "label": "Description" + }, + { + "name": "location", + "type": "text", + "label": "Location" + }, + { + "name": "useDefault", + "type": "boolean", + "label": "Use the default reminder settings for this event" + }, + { + "name": "overrides", + "spec": [ + { + "name": "method", + "type": "select", + "label": "Method", + "options": [ + { + "label": "Email", + "value": "email" + }, + { + "label": "Pop-up", + "value": "popup" + } + ], + "required": true + }, + { + "name": "minutes", + "type": "uinteger", + "label": "Minutes", + "required": true, + "validate": { + "max": 40320 + } + } + ], + "type": "array", + "label": "Reminders", + "validate": { + "maxItems": 5 + } + }, + { + "name": "attendees", + "spec": [ + { + "name": "displayName", + "type": "text", + "label": "Name" + }, + { + "name": "email", + "type": "email", + "label": "Email", + "required": true + } + ], + "type": "array", + "label": "Attendees" + }, + { + "name": "transparency", + "type": "select", + "label": "Show me as", + "required": true, + "validate": { + "enum": [ + "opaque", + "transparent" + ] + } + }, + { + "name": "visibility", + "type": "select", + "label": "Visibility", + "required": true, + "validate": { + "enum": [ + "default", + "public", + "private" + ] + } + }, + { + "name": "sendUpdates", + "type": "select", + "label": "Send notifications about the event creation", + "validate": { + "enum": [ + "all", + "externalOnly", + "none" + ] + } + }, + { + "name": "guestsCanModify", + "type": "boolean", + "label": "Guests can modify the event", + "required": true + }, + { + "name": "recurrence", + "spec": { + "name": "value", + "type": "text", + "label": "Value" + }, + "type": "array", + "label": "Recurrence" + }, + { + "name": "conferenceDate", + "type": "boolean", + "label": "Add Google Meet Video Conferencing", + "required": true + }, + { + "name": "attachments", + "spec": [ + { + "name": "fileUrl", + "type": "url", + "label": "File URL", + "required": true + } + ], + "type": "array", + "label": "Attachments" + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "The meeting was: {{5.status}} for {{5.start}}, Here is the link: {{5.htmlLink}}, And the link of the meeting:{{5.hangoutLink}}.", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1149, + "y": -206 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ] + }, + { + "flow": [ + { + "id": 9, + "module": "google-calendar:createAnEvent", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "mapper": { + "start": "{{4.`Start Date`}}", + "select": "detail", + "summary": "{{4.`Event Name`}}", + "calendar": "ben@forcefactory-ai.com", + "duration": "{{4.Duration}}", + "visibility": "default", + "allDayEvent": false, + "sendUpdates": "all", + "transparency": "opaque", + "conferenceDate": false, + "guestsCanModify": true + }, + "metadata": { + "designer": { + "x": 322, + "y": 129 + }, + "restore": { + "expect": { + "select": { + "label": "In Detail" + }, + "colorId": { + "mode": "chose" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "attendees": { + "mode": "chose" + }, + "overrides": { + "mode": "chose" + }, + "recurrence": { + "mode": "chose" + }, + "visibility": { + "mode": "chose", + "label": "Default" + }, + "allDayEvent": { + "mode": "chose" + }, + "attachments": { + "mode": "chose" + }, + "sendUpdates": { + "mode": "chose", + "label": "To All Guests" + }, + "transparency": { + "mode": "chose", + "label": "Busy" + }, + "conferenceDate": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Create an Event", + "required": true, + "validate": { + "enum": [ + "quick", + "detail" + ] + } + }, + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "colorId", + "type": "select", + "label": "Color" + }, + { + "name": "summary", + "type": "text", + "label": "Event Name", + "required": true + }, + { + "name": "allDayEvent", + "type": "boolean", + "label": "All Day Event", + "required": true + }, + { + "name": "start", + "time": true, + "type": "date", + "label": "Start Date", + "required": true + }, + { + "name": "end", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "duration", + "type": "time", + "label": "Duration" + }, + { + "name": "description", + "type": "text", + "label": "Description" + }, + { + "name": "location", + "type": "text", + "label": "Location" + }, + { + "name": "useDefault", + "type": "boolean", + "label": "Use the default reminder settings for this event" + }, + { + "name": "overrides", + "spec": [ + { + "name": "method", + "type": "select", + "label": "Method", + "options": [ + { + "label": "Email", + "value": "email" + }, + { + "label": "Pop-up", + "value": "popup" + } + ], + "required": true + }, + { + "name": "minutes", + "type": "uinteger", + "label": "Minutes", + "required": true, + "validate": { + "max": 40320 + } + } + ], + "type": "array", + "label": "Reminders", + "validate": { + "maxItems": 5 + } + }, + { + "name": "attendees", + "spec": [ + { + "name": "displayName", + "type": "text", + "label": "Name" + }, + { + "name": "email", + "type": "email", + "label": "Email", + "required": true + } + ], + "type": "array", + "label": "Attendees" + }, + { + "name": "transparency", + "type": "select", + "label": "Show me as", + "required": true, + "validate": { + "enum": [ + "opaque", + "transparent" + ] + } + }, + { + "name": "visibility", + "type": "select", + "label": "Visibility", + "required": true, + "validate": { + "enum": [ + "default", + "public", + "private" + ] + } + }, + { + "name": "sendUpdates", + "type": "select", + "label": "Send notifications about the event creation", + "validate": { + "enum": [ + "all", + "externalOnly", + "none" + ] + } + }, + { + "name": "guestsCanModify", + "type": "boolean", + "label": "Guests can modify the event", + "required": true + }, + { + "name": "recurrence", + "spec": { + "name": "value", + "type": "text", + "label": "Value" + }, + "type": "array", + "label": "Recurrence" + }, + { + "name": "conferenceDate", + "type": "boolean", + "label": "Add Google Meet Video Conferencing", + "required": true + }, + { + "name": "attachments", + "spec": [ + { + "name": "fileUrl", + "type": "url", + "label": "File URL", + "required": true + } + ], + "type": "array", + "label": "Attachments" + } + ], + "advanced": true + } + }, + { + "id": 12, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "The meeting was: {{9.status}} for {{9.start}}till {{9.end}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 621, + "y": 139 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com create events blueprint.json b/backend/data/Make.com create events blueprint.json new file mode 100644 index 0000000000000000000000000000000000000000..744f17c80341d8bb798127e7bf1d9b5bbfa77aaf --- /dev/null +++ b/backend/data/Make.com create events blueprint.json @@ -0,0 +1,878 @@ +{ + "name": "Create Event", + "flow": [ + { + "id": 4, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1690201, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -306, + "y": -3 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Create an Event" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 11, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -6, + "y": -3 + } + }, + "routes": [ + { + "flow": [ + { + "id": 6, + "module": "builtin:BasicFeeder", + "version": 1, + "parameters": {}, + "filter": { + "name": "Email", + "conditions": [ + [ + { + "a": "{{4.invitees}}", + "b": "@", + "o": "text:contain" + } + ] + ] + }, + "mapper": { + "array": "{{split(4.invitees; \",\")}}" + }, + "metadata": { + "designer": { + "x": 335, + "y": -179 + }, + "restore": { + "expect": { + "array": { + "mode": "edit" + } + } + }, + "expect": [ + { + "mode": "edit", + "name": "array", + "spec": [], + "type": "array", + "label": "Array" + } + ] + } + }, + { + "id": 7, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 6, + "target": "5.attendees" + }, + "mapper": { + "email": "{{6.value}}", + "displayName": "" + }, + "metadata": { + "designer": { + "x": 598, + "y": -181 + }, + "restore": { + "extra": { + "feeder": { + "label": "Iterator [6]" + }, + "target": { + "label": "Attendees" + } + } + }, + "expect": [ + { + "name": "displayName", + "type": "text", + "label": "Name" + }, + { + "name": "email", + "type": "email", + "label": "Email", + "required": true + } + ] + } + }, + { + "id": 5, + "module": "google-calendar:createAnEvent", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "mapper": { + "start": "{{4.`Start Date`}}", + "select": "detail", + "summary": "{{4.`Event Name`}}", + "calendar": "ben@forcefactory-ai.com", + "duration": "{{4.Duration}}", + "attendees": "{{7.array}}", + "visibility": "default", + "allDayEvent": false, + "sendUpdates": "all", + "transparency": "opaque", + "conferenceDate": true, + "guestsCanModify": true + }, + "metadata": { + "designer": { + "x": 857, + "y": -202 + }, + "restore": { + "expect": { + "select": { + "label": "In Detail" + }, + "colorId": { + "mode": "chose" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "attendees": { + "mode": "edit" + }, + "overrides": { + "mode": "chose" + }, + "recurrence": { + "mode": "chose" + }, + "visibility": { + "mode": "chose", + "label": "Default" + }, + "allDayEvent": { + "mode": "chose" + }, + "attachments": { + "mode": "chose" + }, + "sendUpdates": { + "mode": "chose", + "label": "To All Guests" + }, + "transparency": { + "mode": "chose", + "label": "Busy" + }, + "conferenceDate": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Create an Event", + "required": true, + "validate": { + "enum": [ + "quick", + "detail" + ] + } + }, + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "colorId", + "type": "select", + "label": "Color" + }, + { + "name": "summary", + "type": "text", + "label": "Event Name", + "required": true + }, + { + "name": "allDayEvent", + "type": "boolean", + "label": "All Day Event", + "required": true + }, + { + "name": "start", + "time": true, + "type": "date", + "label": "Start Date", + "required": true + }, + { + "name": "end", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "duration", + "type": "time", + "label": "Duration" + }, + { + "name": "description", + "type": "text", + "label": "Description" + }, + { + "name": "location", + "type": "text", + "label": "Location" + }, + { + "name": "useDefault", + "type": "boolean", + "label": "Use the default reminder settings for this event" + }, + { + "name": "overrides", + "spec": [ + { + "name": "method", + "type": "select", + "label": "Method", + "options": [ + { + "label": "Email", + "value": "email" + }, + { + "label": "Pop-up", + "value": "popup" + } + ], + "required": true + }, + { + "name": "minutes", + "type": "uinteger", + "label": "Minutes", + "required": true, + "validate": { + "max": 40320 + } + } + ], + "type": "array", + "label": "Reminders", + "validate": { + "maxItems": 5 + } + }, + { + "name": "attendees", + "spec": [ + { + "name": "displayName", + "type": "text", + "label": "Name" + }, + { + "name": "email", + "type": "email", + "label": "Email", + "required": true + } + ], + "type": "array", + "label": "Attendees" + }, + { + "name": "transparency", + "type": "select", + "label": "Show me as", + "required": true, + "validate": { + "enum": [ + "opaque", + "transparent" + ] + } + }, + { + "name": "visibility", + "type": "select", + "label": "Visibility", + "required": true, + "validate": { + "enum": [ + "default", + "public", + "private" + ] + } + }, + { + "name": "sendUpdates", + "type": "select", + "label": "Send notifications about the event creation", + "validate": { + "enum": [ + "all", + "externalOnly", + "none" + ] + } + }, + { + "name": "guestsCanModify", + "type": "boolean", + "label": "Guests can modify the event", + "required": true + }, + { + "name": "recurrence", + "spec": { + "name": "value", + "type": "text", + "label": "Value" + }, + "type": "array", + "label": "Recurrence" + }, + { + "name": "conferenceDate", + "type": "boolean", + "label": "Add Google Meet Video Conferencing", + "required": true + }, + { + "name": "attachments", + "spec": [ + { + "name": "fileUrl", + "type": "url", + "label": "File URL", + "required": true + } + ], + "type": "array", + "label": "Attachments" + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "The meeting was: {{5.status}} for {{5.start}}, Here is the link: {{5.htmlLink}}, And the link of the meeting:{{5.hangoutLink}}.", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1149, + "y": -206 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ] + }, + { + "flow": [ + { + "id": 9, + "module": "google-calendar:createAnEvent", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "mapper": { + "start": "{{4.`Start Date`}}", + "select": "detail", + "summary": "{{4.`Event Name`}}", + "calendar": "ben@forcefactory-ai.com", + "duration": "{{4.Duration}}", + "visibility": "default", + "allDayEvent": false, + "sendUpdates": "all", + "transparency": "opaque", + "conferenceDate": false, + "guestsCanModify": true + }, + "metadata": { + "designer": { + "x": 322, + "y": 129 + }, + "restore": { + "expect": { + "select": { + "label": "In Detail" + }, + "colorId": { + "mode": "chose" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "attendees": { + "mode": "chose" + }, + "overrides": { + "mode": "chose" + }, + "recurrence": { + "mode": "chose" + }, + "visibility": { + "mode": "chose", + "label": "Default" + }, + "allDayEvent": { + "mode": "chose" + }, + "attachments": { + "mode": "chose" + }, + "sendUpdates": { + "mode": "chose", + "label": "To All Guests" + }, + "transparency": { + "mode": "chose", + "label": "Busy" + }, + "conferenceDate": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Create an Event", + "required": true, + "validate": { + "enum": [ + "quick", + "detail" + ] + } + }, + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "colorId", + "type": "select", + "label": "Color" + }, + { + "name": "summary", + "type": "text", + "label": "Event Name", + "required": true + }, + { + "name": "allDayEvent", + "type": "boolean", + "label": "All Day Event", + "required": true + }, + { + "name": "start", + "time": true, + "type": "date", + "label": "Start Date", + "required": true + }, + { + "name": "end", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "duration", + "type": "time", + "label": "Duration" + }, + { + "name": "description", + "type": "text", + "label": "Description" + }, + { + "name": "location", + "type": "text", + "label": "Location" + }, + { + "name": "useDefault", + "type": "boolean", + "label": "Use the default reminder settings for this event" + }, + { + "name": "overrides", + "spec": [ + { + "name": "method", + "type": "select", + "label": "Method", + "options": [ + { + "label": "Email", + "value": "email" + }, + { + "label": "Pop-up", + "value": "popup" + } + ], + "required": true + }, + { + "name": "minutes", + "type": "uinteger", + "label": "Minutes", + "required": true, + "validate": { + "max": 40320 + } + } + ], + "type": "array", + "label": "Reminders", + "validate": { + "maxItems": 5 + } + }, + { + "name": "attendees", + "spec": [ + { + "name": "displayName", + "type": "text", + "label": "Name" + }, + { + "name": "email", + "type": "email", + "label": "Email", + "required": true + } + ], + "type": "array", + "label": "Attendees" + }, + { + "name": "transparency", + "type": "select", + "label": "Show me as", + "required": true, + "validate": { + "enum": [ + "opaque", + "transparent" + ] + } + }, + { + "name": "visibility", + "type": "select", + "label": "Visibility", + "required": true, + "validate": { + "enum": [ + "default", + "public", + "private" + ] + } + }, + { + "name": "sendUpdates", + "type": "select", + "label": "Send notifications about the event creation", + "validate": { + "enum": [ + "all", + "externalOnly", + "none" + ] + } + }, + { + "name": "guestsCanModify", + "type": "boolean", + "label": "Guests can modify the event", + "required": true + }, + { + "name": "recurrence", + "spec": { + "name": "value", + "type": "text", + "label": "Value" + }, + "type": "array", + "label": "Recurrence" + }, + { + "name": "conferenceDate", + "type": "boolean", + "label": "Add Google Meet Video Conferencing", + "required": true + }, + { + "name": "attachments", + "spec": [ + { + "name": "fileUrl", + "type": "url", + "label": "File URL", + "required": true + } + ], + "type": "array", + "label": "Attachments" + } + ], + "advanced": true + } + }, + { + "id": 12, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "The meeting was: {{9.status}} for {{9.start}}till {{9.end}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 621, + "y": 139 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com get events blueprint (1).json b/backend/data/Make.com get events blueprint (1).json new file mode 100644 index 0000000000000000000000000000000000000000..5306369bd9224a918ee5e2204132ccfdc3e3fc40 --- /dev/null +++ b/backend/data/Make.com get events blueprint (1).json @@ -0,0 +1,561 @@ +{ + "name": "Get calender Events", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1690265, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -568, + "y": -1 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Get Calender" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 7, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -227, + "y": -1 + } + }, + "routes": [ + { + "flow": [ + { + "id": 2, + "module": "google-calendar:searchEvents", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "filter": { + "name": "All events", + "conditions": [ + [ + { + "a": "{{1.email}}", + "b": "undefined", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "limit": "20", + "orderBy": "startTime", + "timeMax": "{{1.`End date`}}", + "timeMin": "{{1.`Start Date`}}", + "calendar": "ben@forcefactory-ai.com", + "eventTypes": [ + "default", + "fromGmail", + "focusTime", + "outOfOffice", + "workingLocation" + ], + "singleEvents": true + }, + "metadata": { + "designer": { + "x": 204, + "y": -105 + }, + "restore": { + "expect": { + "orderBy": { + "mode": "chose", + "label": "Start Time (ascending)" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "eventTypes": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "timeMin", + "time": true, + "type": "date", + "label": "Start Date" + }, + { + "name": "timeMax", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "updatedMin", + "time": true, + "type": "date", + "label": "Updated from" + }, + { + "name": "singleEvents", + "type": "boolean", + "label": "Single Events", + "required": true + }, + { + "name": "q", + "type": "text", + "label": "Query" + }, + { + "name": "eventTypes", + "type": "select", + "label": "Event Types", + "multiple": true, + "validate": { + "enum": [ + "default", + "fromGmail", + "focusTime", + "outOfOffice", + "workingLocation" + ] + } + }, + { + "name": "orderBy", + "type": "select", + "label": "Order By", + "validate": { + "enum": [ + "startTime", + "updated" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + } + ] + } + }, + { + "id": 4, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 2 + }, + "mapper": { + "end": "{{2.end}}", + "start": "{{2.start}}", + "summary": "{{2.summary}}", + "attendees": "{{2.attendees}}", + "description": "{{2.description}}", + "hangoutLink": "{{2.hangoutLink}}" + }, + "metadata": { + "designer": { + "x": 552, + "y": -100 + }, + "restore": { + "extra": { + "feeder": { + "label": "Google Calendar - Search Events [2]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 3, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{4.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 826, + "y": -99 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 5, + "module": "google-calendar:searchEvents", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "filter": { + "name": "email", + "conditions": [ + [ + { + "a": "{{1.email}}", + "b": "@", + "o": "text:contain" + } + ] + ] + }, + "mapper": { + "q": "{{1.email}}", + "limit": "20", + "timeMax": "{{1.`End date`}}", + "timeMin": "{{1.`Start Date`}}", + "calendar": "ben@forcefactory-ai.com", + "singleEvents": false + }, + "metadata": { + "designer": { + "x": 206, + "y": 159 + }, + "restore": { + "expect": { + "orderBy": { + "mode": "chose", + "label": "Empty" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "eventTypes": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "timeMin", + "time": true, + "type": "date", + "label": "Start Date" + }, + { + "name": "timeMax", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "updatedMin", + "time": true, + "type": "date", + "label": "Updated from" + }, + { + "name": "singleEvents", + "type": "boolean", + "label": "Single Events", + "required": true + }, + { + "name": "q", + "type": "text", + "label": "Query" + }, + { + "name": "eventTypes", + "type": "select", + "label": "Event Types", + "multiple": true, + "validate": { + "enum": [ + "default", + "fromGmail", + "focusTime", + "outOfOffice", + "workingLocation" + ] + } + }, + { + "name": "orderBy", + "type": "select", + "label": "Order By", + "validate": { + "enum": [ + "startTime", + "updated" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + } + ] + } + }, + { + "id": 8, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 5 + }, + "mapper": { + "end": "{{5.end}}", + "start": "{{5.start}}", + "summary": "{{5.summary}}", + "attendees": "{{5.attendees}}", + "description": "{{5.description}}", + "hangoutLink": "{{5.hangoutLink}}" + }, + "metadata": { + "designer": { + "x": 556, + "y": 156 + }, + "restore": { + "extra": { + "feeder": { + "label": "Google Calendar - Search Events [5]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 9, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 844, + "y": 159 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com get events blueprint.json b/backend/data/Make.com get events blueprint.json new file mode 100644 index 0000000000000000000000000000000000000000..5306369bd9224a918ee5e2204132ccfdc3e3fc40 --- /dev/null +++ b/backend/data/Make.com get events blueprint.json @@ -0,0 +1,561 @@ +{ + "name": "Get calender Events", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1690265, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -568, + "y": -1 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Get Calender" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 7, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -227, + "y": -1 + } + }, + "routes": [ + { + "flow": [ + { + "id": 2, + "module": "google-calendar:searchEvents", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "filter": { + "name": "All events", + "conditions": [ + [ + { + "a": "{{1.email}}", + "b": "undefined", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "limit": "20", + "orderBy": "startTime", + "timeMax": "{{1.`End date`}}", + "timeMin": "{{1.`Start Date`}}", + "calendar": "ben@forcefactory-ai.com", + "eventTypes": [ + "default", + "fromGmail", + "focusTime", + "outOfOffice", + "workingLocation" + ], + "singleEvents": true + }, + "metadata": { + "designer": { + "x": 204, + "y": -105 + }, + "restore": { + "expect": { + "orderBy": { + "mode": "chose", + "label": "Start Time (ascending)" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "eventTypes": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "timeMin", + "time": true, + "type": "date", + "label": "Start Date" + }, + { + "name": "timeMax", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "updatedMin", + "time": true, + "type": "date", + "label": "Updated from" + }, + { + "name": "singleEvents", + "type": "boolean", + "label": "Single Events", + "required": true + }, + { + "name": "q", + "type": "text", + "label": "Query" + }, + { + "name": "eventTypes", + "type": "select", + "label": "Event Types", + "multiple": true, + "validate": { + "enum": [ + "default", + "fromGmail", + "focusTime", + "outOfOffice", + "workingLocation" + ] + } + }, + { + "name": "orderBy", + "type": "select", + "label": "Order By", + "validate": { + "enum": [ + "startTime", + "updated" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + } + ] + } + }, + { + "id": 4, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 2 + }, + "mapper": { + "end": "{{2.end}}", + "start": "{{2.start}}", + "summary": "{{2.summary}}", + "attendees": "{{2.attendees}}", + "description": "{{2.description}}", + "hangoutLink": "{{2.hangoutLink}}" + }, + "metadata": { + "designer": { + "x": 552, + "y": -100 + }, + "restore": { + "extra": { + "feeder": { + "label": "Google Calendar - Search Events [2]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 3, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{4.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 826, + "y": -99 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 5, + "module": "google-calendar:searchEvents", + "version": 5, + "parameters": { + "__IMTCONN__": 3247930 + }, + "filter": { + "name": "email", + "conditions": [ + [ + { + "a": "{{1.email}}", + "b": "@", + "o": "text:contain" + } + ] + ] + }, + "mapper": { + "q": "{{1.email}}", + "limit": "20", + "timeMax": "{{1.`End date`}}", + "timeMin": "{{1.`Start Date`}}", + "calendar": "ben@forcefactory-ai.com", + "singleEvents": false + }, + "metadata": { + "designer": { + "x": 206, + "y": 159 + }, + "restore": { + "expect": { + "orderBy": { + "mode": "chose", + "label": "Empty" + }, + "calendar": { + "mode": "chose", + "label": "ben@forcefactory-ai.com (Primary Calendar)" + }, + "eventTypes": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "calendar", + "type": "select", + "label": "Calendar ID", + "required": true + }, + { + "name": "timeMin", + "time": true, + "type": "date", + "label": "Start Date" + }, + { + "name": "timeMax", + "time": true, + "type": "date", + "label": "End Date" + }, + { + "name": "updatedMin", + "time": true, + "type": "date", + "label": "Updated from" + }, + { + "name": "singleEvents", + "type": "boolean", + "label": "Single Events", + "required": true + }, + { + "name": "q", + "type": "text", + "label": "Query" + }, + { + "name": "eventTypes", + "type": "select", + "label": "Event Types", + "multiple": true, + "validate": { + "enum": [ + "default", + "fromGmail", + "focusTime", + "outOfOffice", + "workingLocation" + ] + } + }, + { + "name": "orderBy", + "type": "select", + "label": "Order By", + "validate": { + "enum": [ + "startTime", + "updated" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + } + ] + } + }, + { + "id": 8, + "module": "builtin:BasicAggregator", + "version": 1, + "parameters": { + "feeder": 5 + }, + "mapper": { + "end": "{{5.end}}", + "start": "{{5.start}}", + "summary": "{{5.summary}}", + "attendees": "{{5.attendees}}", + "description": "{{5.description}}", + "hangoutLink": "{{5.hangoutLink}}" + }, + "metadata": { + "designer": { + "x": 556, + "y": 156 + }, + "restore": { + "extra": { + "feeder": { + "label": "Google Calendar - Search Events [5]" + }, + "target": { + "label": "Custom" + } + } + } + } + }, + { + "id": 9, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.array}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 844, + "y": 159 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com send whatsapp message blueprint (1).json b/backend/data/Make.com send whatsapp message blueprint (1).json new file mode 100644 index 0000000000000000000000000000000000000000..848caa5c61faaee2c926ea63d42f0d5c65cb423d --- /dev/null +++ b/backend/data/Make.com send whatsapp message blueprint (1).json @@ -0,0 +1,1280 @@ +{ + "name": "Integration WhatsApp Business Cloud", + "flow": [ + { + "id": 3, + "module": "whatsapp-business-cloud:watchEvents", + "version": 1, + "parameters": { + "__IMTHOOK__": 1692798 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -258, + "y": 4 + }, + "restore": { + "parameters": { + "__IMTHOOK__": { + "data": { + "editable": "false" + }, + "label": "My WhatsApp Business Cloud Events webhook" + } + } + }, + "parameters": [ + { + "name": "__IMTHOOK__", + "type": "hook:whatsapp-business-cloud2", + "label": "Webhook", + "required": true + } + ], + "interface": [ + { + "name": "id", + "type": "text", + "label": "WhatsApp Business Account ID" + }, + { + "name": "time", + "type": "date", + "label": "Time" + }, + { + "name": "field", + "type": "text", + "label": "Field" + }, + { + "name": "messaging_product", + "type": "text", + "label": "Messaging Product" + }, + { + "name": "metadata", + "spec": [ + { + "name": "display_phone_number", + "type": "text", + "label": "Display Phone Number" + }, + { + "name": "phone_number_id", + "type": "text", + "label": "Phone Number ID" + } + ], + "type": "collection", + "label": "Metadata" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "profile", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection", + "label": "Profile" + }, + { + "name": "wa_id", + "type": "text", + "label": "WhatsApp ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "messages", + "spec": { + "spec": [ + { + "name": "from", + "type": "text", + "label": "Sender" + }, + { + "name": "id", + "type": "text", + "label": "Message ID" + }, + { + "name": "timestamp", + "type": "date", + "label": "Timestamp" + }, + { + "name": "text", + "spec": [ + { + "name": "body", + "type": "text", + "label": "Body" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "image", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Image" + }, + { + "name": "audio", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "voice", + "type": "boolean", + "label": "Voice" + } + ], + "type": "collection", + "label": "Audio" + }, + { + "name": "video", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Video" + }, + { + "name": "document", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "filename", + "type": "text", + "label": "File Name" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Document" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "name", + "spec": [ + { + "name": "formatted_name", + "type": "text", + "label": "Formatted Name" + }, + { + "name": "first_name", + "type": "text", + "label": "First Name" + }, + { + "name": "last_name", + "type": "text", + "label": "Last Name" + }, + { + "name": "middle_name", + "type": "text", + "label": "Middle Name" + }, + { + "name": "suffix", + "type": "text", + "label": "Name Suffix" + }, + { + "name": "prefix", + "type": "text", + "label": "Name Prefix" + } + ], + "type": "collection", + "label": "Name" + }, + { + "name": "phones", + "spec": [ + { + "name": "phone", + "type": "text", + "label": "Phone" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Phones" + }, + { + "name": "emails", + "spec": [ + { + "name": "email", + "type": "email", + "label": "Email" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Emails" + }, + { + "name": "org", + "spec": [ + { + "name": "company", + "type": "text", + "label": "Company" + }, + { + "name": "department", + "type": "text", + "label": "Department" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Organization" + }, + { + "name": "urls", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "url", + "type": "url", + "label": "URL" + } + ], + "type": "array", + "label": "URLs" + }, + { + "name": "addresses", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "street", + "type": "text", + "label": "Street" + }, + { + "name": "city", + "type": "text", + "label": "City" + }, + { + "name": "zip", + "type": "text", + "label": "ZIP" + }, + { + "name": "country", + "type": "text", + "label": "Country" + }, + { + "name": "country_code", + "type": "text", + "label": "Country Code" + } + ], + "type": "array", + "label": "Addresses" + }, + { + "name": "birthday", + "type": "text", + "label": "Birthday" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "sticker", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Sticker" + }, + { + "name": "location", + "spec": [ + { + "name": "latitude", + "type": "number", + "label": "Latitude" + }, + { + "name": "longitude", + "type": "number", + "label": "Longitude" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "address", + "type": "text", + "label": "Address" + } + ], + "type": "collection", + "label": "Location" + }, + { + "name": "context", + "spec": [ + { + "name": "from", + "type": "text", + "label": "From" + }, + { + "name": "id", + "type": "text", + "label": "Context ID" + } + ], + "type": "collection", + "label": "Context" + }, + { + "name": "button", + "spec": [ + { + "name": "payload", + "type": "text", + "label": "Payload" + }, + { + "name": "text", + "type": "text", + "label": "Text" + } + ], + "type": "collection", + "label": "Button" + }, + { + "name": "interactive", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "list_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + }, + { + "name": "description", + "type": "text", + "label": "Description" + } + ], + "type": "collection", + "label": "List Reply" + }, + { + "name": "button_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Button Reply" + } + ], + "type": "collection", + "label": "Interactive" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Messages" + } + ] + } + }, + { + "id": 6, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -35, + "y": 6 + } + }, + "routes": [ + { + "flow": [ + { + "id": 7, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "filter": { + "name": "Text", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "b": "", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{3.messages[].text.body}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 292, + "y": 172 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 4, + "module": "whatsapp-business-cloud:getMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "filter": { + "name": "Audio", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "o": "exist" + } + ] + ] + }, + "mapper": { + "mediaId": "{{3.messages[].audio.id}}" + }, + "metadata": { + "designer": { + "x": 281, + "y": -207 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "mediaId", + "type": "text", + "label": "Media ID", + "required": true + } + ] + } + }, + { + "id": 5, + "module": "openai-gpt-3:CreateTranscription", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "whisper-1", + "fileData": "{{4.mediaData}}", + "fileName": "{{4.mediaName}}", + "temperature": "1", + "response_format": "json" + }, + "metadata": { + "designer": { + "x": 606, + "y": -199 + }, + "restore": { + "expect": { + "model": { + "mode": "chose", + "label": "Whisper-1" + }, + "response_format": { + "mode": "chose", + "label": "JSON" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "filename", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "prompt", + "type": "text", + "label": "Prompt" + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "json", + "text", + "srt", + "verbose_json", + "vtt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "language", + "type": "text", + "label": "Language" + } + ], + "interface": [ + { + "name": "text", + "type": "text", + "label": "Text" + } + ] + } + }, + { + "id": 8, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{5.text}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 916, + "y": -214 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com send whatsapp message blueprint.json b/backend/data/Make.com send whatsapp message blueprint.json new file mode 100644 index 0000000000000000000000000000000000000000..848caa5c61faaee2c926ea63d42f0d5c65cb423d --- /dev/null +++ b/backend/data/Make.com send whatsapp message blueprint.json @@ -0,0 +1,1280 @@ +{ + "name": "Integration WhatsApp Business Cloud", + "flow": [ + { + "id": 3, + "module": "whatsapp-business-cloud:watchEvents", + "version": 1, + "parameters": { + "__IMTHOOK__": 1692798 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -258, + "y": 4 + }, + "restore": { + "parameters": { + "__IMTHOOK__": { + "data": { + "editable": "false" + }, + "label": "My WhatsApp Business Cloud Events webhook" + } + } + }, + "parameters": [ + { + "name": "__IMTHOOK__", + "type": "hook:whatsapp-business-cloud2", + "label": "Webhook", + "required": true + } + ], + "interface": [ + { + "name": "id", + "type": "text", + "label": "WhatsApp Business Account ID" + }, + { + "name": "time", + "type": "date", + "label": "Time" + }, + { + "name": "field", + "type": "text", + "label": "Field" + }, + { + "name": "messaging_product", + "type": "text", + "label": "Messaging Product" + }, + { + "name": "metadata", + "spec": [ + { + "name": "display_phone_number", + "type": "text", + "label": "Display Phone Number" + }, + { + "name": "phone_number_id", + "type": "text", + "label": "Phone Number ID" + } + ], + "type": "collection", + "label": "Metadata" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "profile", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection", + "label": "Profile" + }, + { + "name": "wa_id", + "type": "text", + "label": "WhatsApp ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "messages", + "spec": { + "spec": [ + { + "name": "from", + "type": "text", + "label": "Sender" + }, + { + "name": "id", + "type": "text", + "label": "Message ID" + }, + { + "name": "timestamp", + "type": "date", + "label": "Timestamp" + }, + { + "name": "text", + "spec": [ + { + "name": "body", + "type": "text", + "label": "Body" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "image", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Image" + }, + { + "name": "audio", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "voice", + "type": "boolean", + "label": "Voice" + } + ], + "type": "collection", + "label": "Audio" + }, + { + "name": "video", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Video" + }, + { + "name": "document", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "filename", + "type": "text", + "label": "File Name" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Document" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "name", + "spec": [ + { + "name": "formatted_name", + "type": "text", + "label": "Formatted Name" + }, + { + "name": "first_name", + "type": "text", + "label": "First Name" + }, + { + "name": "last_name", + "type": "text", + "label": "Last Name" + }, + { + "name": "middle_name", + "type": "text", + "label": "Middle Name" + }, + { + "name": "suffix", + "type": "text", + "label": "Name Suffix" + }, + { + "name": "prefix", + "type": "text", + "label": "Name Prefix" + } + ], + "type": "collection", + "label": "Name" + }, + { + "name": "phones", + "spec": [ + { + "name": "phone", + "type": "text", + "label": "Phone" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Phones" + }, + { + "name": "emails", + "spec": [ + { + "name": "email", + "type": "email", + "label": "Email" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Emails" + }, + { + "name": "org", + "spec": [ + { + "name": "company", + "type": "text", + "label": "Company" + }, + { + "name": "department", + "type": "text", + "label": "Department" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Organization" + }, + { + "name": "urls", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "url", + "type": "url", + "label": "URL" + } + ], + "type": "array", + "label": "URLs" + }, + { + "name": "addresses", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "street", + "type": "text", + "label": "Street" + }, + { + "name": "city", + "type": "text", + "label": "City" + }, + { + "name": "zip", + "type": "text", + "label": "ZIP" + }, + { + "name": "country", + "type": "text", + "label": "Country" + }, + { + "name": "country_code", + "type": "text", + "label": "Country Code" + } + ], + "type": "array", + "label": "Addresses" + }, + { + "name": "birthday", + "type": "text", + "label": "Birthday" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "sticker", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Sticker" + }, + { + "name": "location", + "spec": [ + { + "name": "latitude", + "type": "number", + "label": "Latitude" + }, + { + "name": "longitude", + "type": "number", + "label": "Longitude" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "address", + "type": "text", + "label": "Address" + } + ], + "type": "collection", + "label": "Location" + }, + { + "name": "context", + "spec": [ + { + "name": "from", + "type": "text", + "label": "From" + }, + { + "name": "id", + "type": "text", + "label": "Context ID" + } + ], + "type": "collection", + "label": "Context" + }, + { + "name": "button", + "spec": [ + { + "name": "payload", + "type": "text", + "label": "Payload" + }, + { + "name": "text", + "type": "text", + "label": "Text" + } + ], + "type": "collection", + "label": "Button" + }, + { + "name": "interactive", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "list_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + }, + { + "name": "description", + "type": "text", + "label": "Description" + } + ], + "type": "collection", + "label": "List Reply" + }, + { + "name": "button_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Button Reply" + } + ], + "type": "collection", + "label": "Interactive" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Messages" + } + ] + } + }, + { + "id": 6, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -35, + "y": 6 + } + }, + "routes": [ + { + "flow": [ + { + "id": 7, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "filter": { + "name": "Text", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "b": "", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{3.messages[].text.body}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 292, + "y": 172 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 4, + "module": "whatsapp-business-cloud:getMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "filter": { + "name": "Audio", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "o": "exist" + } + ] + ] + }, + "mapper": { + "mediaId": "{{3.messages[].audio.id}}" + }, + "metadata": { + "designer": { + "x": 281, + "y": -207 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "mediaId", + "type": "text", + "label": "Media ID", + "required": true + } + ] + } + }, + { + "id": 5, + "module": "openai-gpt-3:CreateTranscription", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "whisper-1", + "fileData": "{{4.mediaData}}", + "fileName": "{{4.mediaName}}", + "temperature": "1", + "response_format": "json" + }, + "metadata": { + "designer": { + "x": 606, + "y": -199 + }, + "restore": { + "expect": { + "model": { + "mode": "chose", + "label": "Whisper-1" + }, + "response_format": { + "mode": "chose", + "label": "JSON" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "filename", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "prompt", + "type": "text", + "label": "Prompt" + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "json", + "text", + "srt", + "verbose_json", + "vtt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "language", + "type": "text", + "label": "Language" + } + ], + "interface": [ + { + "name": "text", + "type": "text", + "label": "Text" + } + ] + } + }, + { + "id": 8, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{5.text}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 916, + "y": -214 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com trigger whatsapp blueprint (1).json b/backend/data/Make.com trigger whatsapp blueprint (1).json new file mode 100644 index 0000000000000000000000000000000000000000..848caa5c61faaee2c926ea63d42f0d5c65cb423d --- /dev/null +++ b/backend/data/Make.com trigger whatsapp blueprint (1).json @@ -0,0 +1,1280 @@ +{ + "name": "Integration WhatsApp Business Cloud", + "flow": [ + { + "id": 3, + "module": "whatsapp-business-cloud:watchEvents", + "version": 1, + "parameters": { + "__IMTHOOK__": 1692798 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -258, + "y": 4 + }, + "restore": { + "parameters": { + "__IMTHOOK__": { + "data": { + "editable": "false" + }, + "label": "My WhatsApp Business Cloud Events webhook" + } + } + }, + "parameters": [ + { + "name": "__IMTHOOK__", + "type": "hook:whatsapp-business-cloud2", + "label": "Webhook", + "required": true + } + ], + "interface": [ + { + "name": "id", + "type": "text", + "label": "WhatsApp Business Account ID" + }, + { + "name": "time", + "type": "date", + "label": "Time" + }, + { + "name": "field", + "type": "text", + "label": "Field" + }, + { + "name": "messaging_product", + "type": "text", + "label": "Messaging Product" + }, + { + "name": "metadata", + "spec": [ + { + "name": "display_phone_number", + "type": "text", + "label": "Display Phone Number" + }, + { + "name": "phone_number_id", + "type": "text", + "label": "Phone Number ID" + } + ], + "type": "collection", + "label": "Metadata" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "profile", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection", + "label": "Profile" + }, + { + "name": "wa_id", + "type": "text", + "label": "WhatsApp ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "messages", + "spec": { + "spec": [ + { + "name": "from", + "type": "text", + "label": "Sender" + }, + { + "name": "id", + "type": "text", + "label": "Message ID" + }, + { + "name": "timestamp", + "type": "date", + "label": "Timestamp" + }, + { + "name": "text", + "spec": [ + { + "name": "body", + "type": "text", + "label": "Body" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "image", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Image" + }, + { + "name": "audio", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "voice", + "type": "boolean", + "label": "Voice" + } + ], + "type": "collection", + "label": "Audio" + }, + { + "name": "video", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Video" + }, + { + "name": "document", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "filename", + "type": "text", + "label": "File Name" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Document" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "name", + "spec": [ + { + "name": "formatted_name", + "type": "text", + "label": "Formatted Name" + }, + { + "name": "first_name", + "type": "text", + "label": "First Name" + }, + { + "name": "last_name", + "type": "text", + "label": "Last Name" + }, + { + "name": "middle_name", + "type": "text", + "label": "Middle Name" + }, + { + "name": "suffix", + "type": "text", + "label": "Name Suffix" + }, + { + "name": "prefix", + "type": "text", + "label": "Name Prefix" + } + ], + "type": "collection", + "label": "Name" + }, + { + "name": "phones", + "spec": [ + { + "name": "phone", + "type": "text", + "label": "Phone" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Phones" + }, + { + "name": "emails", + "spec": [ + { + "name": "email", + "type": "email", + "label": "Email" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Emails" + }, + { + "name": "org", + "spec": [ + { + "name": "company", + "type": "text", + "label": "Company" + }, + { + "name": "department", + "type": "text", + "label": "Department" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Organization" + }, + { + "name": "urls", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "url", + "type": "url", + "label": "URL" + } + ], + "type": "array", + "label": "URLs" + }, + { + "name": "addresses", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "street", + "type": "text", + "label": "Street" + }, + { + "name": "city", + "type": "text", + "label": "City" + }, + { + "name": "zip", + "type": "text", + "label": "ZIP" + }, + { + "name": "country", + "type": "text", + "label": "Country" + }, + { + "name": "country_code", + "type": "text", + "label": "Country Code" + } + ], + "type": "array", + "label": "Addresses" + }, + { + "name": "birthday", + "type": "text", + "label": "Birthday" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "sticker", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Sticker" + }, + { + "name": "location", + "spec": [ + { + "name": "latitude", + "type": "number", + "label": "Latitude" + }, + { + "name": "longitude", + "type": "number", + "label": "Longitude" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "address", + "type": "text", + "label": "Address" + } + ], + "type": "collection", + "label": "Location" + }, + { + "name": "context", + "spec": [ + { + "name": "from", + "type": "text", + "label": "From" + }, + { + "name": "id", + "type": "text", + "label": "Context ID" + } + ], + "type": "collection", + "label": "Context" + }, + { + "name": "button", + "spec": [ + { + "name": "payload", + "type": "text", + "label": "Payload" + }, + { + "name": "text", + "type": "text", + "label": "Text" + } + ], + "type": "collection", + "label": "Button" + }, + { + "name": "interactive", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "list_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + }, + { + "name": "description", + "type": "text", + "label": "Description" + } + ], + "type": "collection", + "label": "List Reply" + }, + { + "name": "button_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Button Reply" + } + ], + "type": "collection", + "label": "Interactive" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Messages" + } + ] + } + }, + { + "id": 6, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -35, + "y": 6 + } + }, + "routes": [ + { + "flow": [ + { + "id": 7, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "filter": { + "name": "Text", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "b": "", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{3.messages[].text.body}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 292, + "y": 172 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 4, + "module": "whatsapp-business-cloud:getMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "filter": { + "name": "Audio", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "o": "exist" + } + ] + ] + }, + "mapper": { + "mediaId": "{{3.messages[].audio.id}}" + }, + "metadata": { + "designer": { + "x": 281, + "y": -207 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "mediaId", + "type": "text", + "label": "Media ID", + "required": true + } + ] + } + }, + { + "id": 5, + "module": "openai-gpt-3:CreateTranscription", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "whisper-1", + "fileData": "{{4.mediaData}}", + "fileName": "{{4.mediaName}}", + "temperature": "1", + "response_format": "json" + }, + "metadata": { + "designer": { + "x": 606, + "y": -199 + }, + "restore": { + "expect": { + "model": { + "mode": "chose", + "label": "Whisper-1" + }, + "response_format": { + "mode": "chose", + "label": "JSON" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "filename", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "prompt", + "type": "text", + "label": "Prompt" + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "json", + "text", + "srt", + "verbose_json", + "vtt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "language", + "type": "text", + "label": "Language" + } + ], + "interface": [ + { + "name": "text", + "type": "text", + "label": "Text" + } + ] + } + }, + { + "id": 8, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{5.text}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 916, + "y": -214 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Make.com trigger whatsapp blueprint.json b/backend/data/Make.com trigger whatsapp blueprint.json new file mode 100644 index 0000000000000000000000000000000000000000..848caa5c61faaee2c926ea63d42f0d5c65cb423d --- /dev/null +++ b/backend/data/Make.com trigger whatsapp blueprint.json @@ -0,0 +1,1280 @@ +{ + "name": "Integration WhatsApp Business Cloud", + "flow": [ + { + "id": 3, + "module": "whatsapp-business-cloud:watchEvents", + "version": 1, + "parameters": { + "__IMTHOOK__": 1692798 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -258, + "y": 4 + }, + "restore": { + "parameters": { + "__IMTHOOK__": { + "data": { + "editable": "false" + }, + "label": "My WhatsApp Business Cloud Events webhook" + } + } + }, + "parameters": [ + { + "name": "__IMTHOOK__", + "type": "hook:whatsapp-business-cloud2", + "label": "Webhook", + "required": true + } + ], + "interface": [ + { + "name": "id", + "type": "text", + "label": "WhatsApp Business Account ID" + }, + { + "name": "time", + "type": "date", + "label": "Time" + }, + { + "name": "field", + "type": "text", + "label": "Field" + }, + { + "name": "messaging_product", + "type": "text", + "label": "Messaging Product" + }, + { + "name": "metadata", + "spec": [ + { + "name": "display_phone_number", + "type": "text", + "label": "Display Phone Number" + }, + { + "name": "phone_number_id", + "type": "text", + "label": "Phone Number ID" + } + ], + "type": "collection", + "label": "Metadata" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "profile", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection", + "label": "Profile" + }, + { + "name": "wa_id", + "type": "text", + "label": "WhatsApp ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "messages", + "spec": { + "spec": [ + { + "name": "from", + "type": "text", + "label": "Sender" + }, + { + "name": "id", + "type": "text", + "label": "Message ID" + }, + { + "name": "timestamp", + "type": "date", + "label": "Timestamp" + }, + { + "name": "text", + "spec": [ + { + "name": "body", + "type": "text", + "label": "Body" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "image", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Image" + }, + { + "name": "audio", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + }, + { + "name": "voice", + "type": "boolean", + "label": "Voice" + } + ], + "type": "collection", + "label": "Audio" + }, + { + "name": "video", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Video" + }, + { + "name": "document", + "spec": [ + { + "name": "caption", + "type": "text", + "label": "Caption" + }, + { + "name": "filename", + "type": "text", + "label": "File Name" + }, + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Document" + }, + { + "name": "contacts", + "spec": { + "spec": [ + { + "name": "name", + "spec": [ + { + "name": "formatted_name", + "type": "text", + "label": "Formatted Name" + }, + { + "name": "first_name", + "type": "text", + "label": "First Name" + }, + { + "name": "last_name", + "type": "text", + "label": "Last Name" + }, + { + "name": "middle_name", + "type": "text", + "label": "Middle Name" + }, + { + "name": "suffix", + "type": "text", + "label": "Name Suffix" + }, + { + "name": "prefix", + "type": "text", + "label": "Name Prefix" + } + ], + "type": "collection", + "label": "Name" + }, + { + "name": "phones", + "spec": [ + { + "name": "phone", + "type": "text", + "label": "Phone" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Phones" + }, + { + "name": "emails", + "spec": [ + { + "name": "email", + "type": "email", + "label": "Email" + }, + { + "name": "type", + "type": "text", + "label": "Type" + } + ], + "type": "array", + "label": "Emails" + }, + { + "name": "org", + "spec": [ + { + "name": "company", + "type": "text", + "label": "Company" + }, + { + "name": "department", + "type": "text", + "label": "Department" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Organization" + }, + { + "name": "urls", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "url", + "type": "url", + "label": "URL" + } + ], + "type": "array", + "label": "URLs" + }, + { + "name": "addresses", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "street", + "type": "text", + "label": "Street" + }, + { + "name": "city", + "type": "text", + "label": "City" + }, + { + "name": "zip", + "type": "text", + "label": "ZIP" + }, + { + "name": "country", + "type": "text", + "label": "Country" + }, + { + "name": "country_code", + "type": "text", + "label": "Country Code" + } + ], + "type": "array", + "label": "Addresses" + }, + { + "name": "birthday", + "type": "text", + "label": "Birthday" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Contacts" + }, + { + "name": "sticker", + "spec": [ + { + "name": "mime_type", + "type": "text", + "label": "MIME Type" + }, + { + "name": "sha256", + "type": "text", + "label": "SHA256" + }, + { + "name": "id", + "type": "text", + "label": "Media ID" + } + ], + "type": "collection", + "label": "Sticker" + }, + { + "name": "location", + "spec": [ + { + "name": "latitude", + "type": "number", + "label": "Latitude" + }, + { + "name": "longitude", + "type": "number", + "label": "Longitude" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "address", + "type": "text", + "label": "Address" + } + ], + "type": "collection", + "label": "Location" + }, + { + "name": "context", + "spec": [ + { + "name": "from", + "type": "text", + "label": "From" + }, + { + "name": "id", + "type": "text", + "label": "Context ID" + } + ], + "type": "collection", + "label": "Context" + }, + { + "name": "button", + "spec": [ + { + "name": "payload", + "type": "text", + "label": "Payload" + }, + { + "name": "text", + "type": "text", + "label": "Text" + } + ], + "type": "collection", + "label": "Button" + }, + { + "name": "interactive", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "list_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + }, + { + "name": "description", + "type": "text", + "label": "Description" + } + ], + "type": "collection", + "label": "List Reply" + }, + { + "name": "button_reply", + "spec": [ + { + "name": "id", + "type": "number", + "label": "ID" + }, + { + "name": "title", + "type": "text", + "label": "Title" + } + ], + "type": "collection", + "label": "Button Reply" + } + ], + "type": "collection", + "label": "Interactive" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Messages" + } + ] + } + }, + { + "id": 6, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": -35, + "y": 6 + } + }, + "routes": [ + { + "flow": [ + { + "id": 7, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "filter": { + "name": "Text", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "b": "", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{3.messages[].text.body}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 292, + "y": 172 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 4, + "module": "whatsapp-business-cloud:getMedia", + "version": 1, + "parameters": { + "__IMTCONN__": 2882568 + }, + "filter": { + "name": "Audio", + "conditions": [ + [ + { + "a": "{{3.messages[].audio}}", + "o": "exist" + } + ] + ] + }, + "mapper": { + "mediaId": "{{3.messages[].audio.id}}" + }, + "metadata": { + "designer": { + "x": 281, + "y": -207 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "whatsapp-business-cloud2" + }, + "label": "API 2 (Ben)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:whatsapp-business-cloud2", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "mediaId", + "type": "text", + "label": "Media ID", + "required": true + } + ] + } + }, + { + "id": 5, + "module": "openai-gpt-3:CreateTranscription", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "model": "whisper-1", + "fileData": "{{4.mediaData}}", + "fileName": "{{4.mediaName}}", + "temperature": "1", + "response_format": "json" + }, + "metadata": { + "designer": { + "x": 606, + "y": -199 + }, + "restore": { + "expect": { + "model": { + "mode": "chose", + "label": "Whisper-1" + }, + "response_format": { + "mode": "chose", + "label": "JSON" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "filename", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "prompt", + "type": "text", + "label": "Prompt" + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "json", + "text", + "srt", + "verbose_json", + "vtt" + ] + } + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "language", + "type": "text", + "label": "Language" + } + ], + "interface": [ + { + "name": "text", + "type": "text", + "label": "Text" + } + ] + } + }, + { + "id": 8, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "mapper": { + "ca": "", + "qs": [], + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/agents/trigger", + "data": "{\"message\":{\"role\":\"user\",\"content\":\"{{5.text}}\"},\"agent_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\",\"conversation_id\":\"894a2735-27fd-4e4a-aa20-a54037d3f176\"}", + "gzip": true, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "Authorization", + "value": "b7405bf3cbe3-414d-9074-fdd2876196f0:sk-M2IzNGQ3N2YtZmRjZi00MmIxLTgwZGQtZTk0ZDA2Zjk1YTI4" + } + ], + "timeout": "", + "useMtls": false, + "authPass": "", + "authUser": "", + "bodyType": "raw", + "contentType": "application/json", + "serializeUrl": false, + "shareCookies": false, + "parseResponse": true, + "followRedirect": true, + "useQuerystring": false, + "followAllRedirects": false, + "rejectUnauthorized": true + }, + "metadata": { + "designer": { + "x": 916, + "y": -214 + }, + "restore": { + "expect": { + "qs": { + "mode": "chose" + }, + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Headers" + }, + { + "name": "qs", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name", + "required": true + }, + { + "name": "value", + "type": "text", + "label": "Value" + } + ], + "type": "array", + "label": "Query String" + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Post to Notion Content Calendar (1).json b/backend/data/Post to Notion Content Calendar (1).json new file mode 100644 index 0000000000000000000000000000000000000000..b5ec2a16e5d5fea2264c9cc29f4fbb217e2bf11a --- /dev/null +++ b/backend/data/Post to Notion Content Calendar (1).json @@ -0,0 +1,2475 @@ +{ + "name": "Linkedin content calendar", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1833030, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "My gateway-webhook webhook" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": 300, + "y": 0 + } + }, + "routes": [ + { + "flow": [ + { + "id": 3, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.Image}}", + "b": "undefined", + "o": "text:notequal" + } + ] + ] + }, + "mapper": { + "fields": { + "JObo": "{{1.Post}}", + "title": "{{1.Title}}", + "%7DJXG": [ + { + "url": "{{1.Image}}", + "name": "{{1.Title}}" + } + ], + "D%7BtU": "{{1.Type}}", + "Q%5DMd": "Ready" + }, + "select": "list", + "database": "1201124570fe800694fce185db0ce624" + }, + "metadata": { + "designer": { + "x": 600, + "y": -150 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "%7DJXG": { + "mode": "chose", + "items": [ + null + ] + }, + "D%7BtU": { + "mode": "edit" + }, + "Q%5DMd": { + "mode": "chose", + "label": "Ready" + }, + "%40%7BuA": { + "mode": "chose" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "options": "rpc://notion/1/listUsers?noBot=true", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "options": [ + { + "label": "Text", + "value": "Text" + }, + { + "label": "Video", + "value": "Video" + }, + { + "label": "Image", + "value": "Image" + } + ], + "metadata": { + "type": "multi_select" + }, + "multiple": true, + "validate": false + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "Idea", + "value": "Idea" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "Ready", + "value": "Ready" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Posted", + "value": "Posted" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "help": "If empty, the file name will have **Integromat** .", + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "metadata": { + "type": "multi_select" + }, + "multiple": true + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "Idea", + "Ready", + "Posted" + ] + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Type", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Type" + }, + { + "name": "Post", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Post" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "File", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "file", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "expiry_time", + "type": "date", + "label": "Expiry Time" + } + ], + "type": "collection", + "label": "File" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "array", + "label": "File" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 4, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "filter": { + "name": "no file", + "conditions": [ + [ + { + "a": "{{1.Image}}", + "b": "undefined", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "fields": { + "JObo": "{{1.Post}}", + "title": "{{1.Title}}", + "D%7BtU": "{{1.Type}}", + "Q%5DMd": "Ready" + }, + "select": "list", + "database": "1201124570fe800694fce185db0ce624" + }, + "metadata": { + "designer": { + "x": 623, + "y": 153 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "%7DJXG": { + "mode": "chose" + }, + "D%7BtU": { + "mode": "edit" + }, + "Q%5DMd": { + "mode": "chose", + "label": "Ready" + }, + "%40%7BuA": { + "mode": "chose" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "options": "rpc://notion/1/listUsers?noBot=true", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "options": [ + { + "label": "Text", + "value": "Text" + }, + { + "label": "Video", + "value": "Video" + }, + { + "label": "Image", + "value": "Image" + } + ], + "metadata": { + "type": "multi_select" + }, + "multiple": true, + "validate": false + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "Idea", + "value": "Idea" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "Ready", + "value": "Ready" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Posted", + "value": "Posted" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "help": "If empty, the file name will have **Integromat** .", + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "metadata": { + "type": "multi_select" + }, + "multiple": true + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "Idea", + "Ready", + "Posted" + ] + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Type", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Type" + }, + { + "name": "Post", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Post" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "File", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "file", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "expiry_time", + "type": "date", + "label": "Expiry Time" + } + ], + "type": "collection", + "label": "File" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "array", + "label": "File" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Post to Notion Content Calendar.json b/backend/data/Post to Notion Content Calendar.json new file mode 100644 index 0000000000000000000000000000000000000000..b5ec2a16e5d5fea2264c9cc29f4fbb217e2bf11a --- /dev/null +++ b/backend/data/Post to Notion Content Calendar.json @@ -0,0 +1,2475 @@ +{ + "name": "Linkedin content calendar", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1833030, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "My gateway-webhook webhook" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "builtin:BasicRouter", + "version": 1, + "mapper": null, + "metadata": { + "designer": { + "x": 300, + "y": 0 + } + }, + "routes": [ + { + "flow": [ + { + "id": 3, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "filter": { + "name": "", + "conditions": [ + [ + { + "a": "{{1.Image}}", + "b": "undefined", + "o": "text:notequal" + } + ] + ] + }, + "mapper": { + "fields": { + "JObo": "{{1.Post}}", + "title": "{{1.Title}}", + "%7DJXG": [ + { + "url": "{{1.Image}}", + "name": "{{1.Title}}" + } + ], + "D%7BtU": "{{1.Type}}", + "Q%5DMd": "Ready" + }, + "select": "list", + "database": "1201124570fe800694fce185db0ce624" + }, + "metadata": { + "designer": { + "x": 600, + "y": -150 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "%7DJXG": { + "mode": "chose", + "items": [ + null + ] + }, + "D%7BtU": { + "mode": "edit" + }, + "Q%5DMd": { + "mode": "chose", + "label": "Ready" + }, + "%40%7BuA": { + "mode": "chose" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "options": "rpc://notion/1/listUsers?noBot=true", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "options": [ + { + "label": "Text", + "value": "Text" + }, + { + "label": "Video", + "value": "Video" + }, + { + "label": "Image", + "value": "Image" + } + ], + "metadata": { + "type": "multi_select" + }, + "multiple": true, + "validate": false + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "Idea", + "value": "Idea" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "Ready", + "value": "Ready" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Posted", + "value": "Posted" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "help": "If empty, the file name will have **Integromat** .", + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "metadata": { + "type": "multi_select" + }, + "multiple": true + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "Idea", + "Ready", + "Posted" + ] + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Type", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Type" + }, + { + "name": "Post", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Post" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "File", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "file", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "expiry_time", + "type": "date", + "label": "Expiry Time" + } + ], + "type": "collection", + "label": "File" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "array", + "label": "File" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ] + }, + { + "flow": [ + { + "id": 4, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "filter": { + "name": "no file", + "conditions": [ + [ + { + "a": "{{1.Image}}", + "b": "undefined", + "o": "text:equal" + } + ] + ] + }, + "mapper": { + "fields": { + "JObo": "{{1.Post}}", + "title": "{{1.Title}}", + "D%7BtU": "{{1.Type}}", + "Q%5DMd": "Ready" + }, + "select": "list", + "database": "1201124570fe800694fce185db0ce624" + }, + "metadata": { + "designer": { + "x": 623, + "y": 153 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "%7DJXG": { + "mode": "chose" + }, + "D%7BtU": { + "mode": "edit" + }, + "Q%5DMd": { + "mode": "chose", + "label": "Ready" + }, + "%40%7BuA": { + "mode": "chose" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "options": "rpc://notion/1/listUsers?noBot=true", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "options": [ + { + "label": "Text", + "value": "Text" + }, + { + "label": "Video", + "value": "Video" + }, + { + "label": "Image", + "value": "Image" + } + ], + "metadata": { + "type": "multi_select" + }, + "multiple": true, + "validate": false + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "Idea", + "value": "Idea" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "Ready", + "value": "Ready" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Posted", + "value": "Posted" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "help": "If empty, the file name will have **Integromat** .", + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Name", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "%40%7BuA", + "type": "select", + "label": "Assign", + "metadata": { + "type": "people" + }, + "multiple": true + }, + { + "name": "D%7BtU", + "type": "select", + "label": "Type", + "metadata": { + "type": "multi_select" + }, + "multiple": true + }, + { + "name": "JObo", + "type": "text", + "label": "Post", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "Q%5DMd", + "type": "select", + "label": "Status", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "Idea", + "Ready", + "Posted" + ] + } + }, + { + "name": "%7DJXG", + "spec": [ + { + "name": "url", + "type": "url", + "label": "Image URL", + "required": true + }, + { + "name": "name", + "type": "text", + "label": "File Name" + } + ], + "type": "array", + "label": "File", + "metadata": { + "type": "files" + } + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "Assign", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "array", + "label": "Assign" + }, + { + "name": "Type", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Type" + }, + { + "name": "Post", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Post" + }, + { + "name": "Status", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Status" + }, + { + "name": "File", + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "file", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "expiry_time", + "type": "date", + "label": "Expiry Time" + } + ], + "type": "collection", + "label": "File" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "array", + "label": "File" + }, + { + "name": "Name", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Name" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ] + } + ] + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Scrape Linkedin profiles (updates airtable + relevance knowledge base) (1).json b/backend/data/Scrape Linkedin profiles (updates airtable + relevance knowledge base) (1).json new file mode 100644 index 0000000000000000000000000000000000000000..df27f6883bc89df0f99a5f85707ab0eb7503ef29 --- /dev/null +++ b/backend/data/Scrape Linkedin profiles (updates airtable + relevance knowledge base) (1).json @@ -0,0 +1,623 @@ +{ + "name": "Scrape linkedin profiles (copy)", + "flow": [ + { + "id": 1, + "module": "google-sheets:filterRows", + "version": 2, + "parameters": { + "__IMTCONN__": 3247303 + }, + "mapper": { + "from": "drive", + "sheetId": "Sheet1", + "sortOrder": "asc", + "spreadsheetId": "1--UuICEBMFI9tzPAYcgt0-m5i0fWlSqN-HSFCv2gKJY", + "tableFirstRow": "A1:Z1", + "includesHeaders": true, + "valueRenderOption": "FORMATTED_VALUE", + "dateTimeRenderOption": "FORMATTED_STRING" + }, + "metadata": { + "designer": { + "x": -142, + "y": 0 + }, + "restore": { + "expect": { + "from": { + "label": "Select from My Drive" + }, + "orderBy": { + "mode": "chose" + }, + "sheetId": { + "mode": "chose", + "label": "Sheet1" + }, + "sortOrder": { + "mode": "chose", + "label": "Ascending" + }, + "spreadsheetId": { + "mode": "chose", + "label": "Linkedin profiles" + }, + "tableFirstRow": { + "label": "A-Z" + }, + "includesHeaders": { + "mode": "chose", + "label": "Yes" + }, + "valueRenderOption": { + "mode": "chose", + "label": "Formatted value" + }, + "dateTimeRenderOption": { + "mode": "chose", + "label": "Formatted string" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "from", + "type": "select", + "label": "Search Method", + "required": true, + "validate": { + "enum": [ + "drive", + "share" + ] + } + }, + { + "name": "valueRenderOption", + "type": "select", + "label": "Value render option", + "validate": { + "enum": [ + "FORMATTED_VALUE", + "UNFORMATTED_VALUE", + "FORMULA" + ] + } + }, + { + "name": "dateTimeRenderOption", + "type": "select", + "label": "Date and time render option", + "validate": { + "enum": [ + "SERIAL_NUMBER", + "FORMATTED_STRING" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "spreadsheetId", + "type": "select", + "label": "Spreadsheet ID", + "required": true + }, + { + "name": "sheetId", + "type": "select", + "label": "Sheet Name", + "required": true + }, + { + "name": "includesHeaders", + "type": "select", + "label": "Table contains headers", + "required": true, + "validate": { + "enum": [ + true, + false + ] + } + }, + { + "name": "tableFirstRow", + "type": "select", + "label": "Column range", + "required": true, + "validate": { + "enum": [ + "A1:Z1", + "A1:BZ1", + "A1:CZ1", + "A1:DZ1", + "A1:MZ1", + "A1:ZZ1", + "A1:AZZ1", + "A1:BZZ1", + "A1:CZZ1", + "A1:DZZ1", + "A1:MZZ1", + "A1:ZZZ1" + ] + } + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": "rpc://google-sheets/2/rpcGetFilterKeys?includesHeaders=true" + }, + { + "name": "orderBy", + "type": "select", + "label": "Order by" + }, + { + "name": "sortOrder", + "type": "select", + "label": "Sort order", + "validate": { + "enum": [ + "asc", + "desc" + ] + } + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "__ROW_NUMBER__", + "type": "number", + "label": "Row number" + }, + { + "name": "__SPREADSHEET_ID__", + "type": "text", + "label": "Spreadsheet ID" + }, + { + "name": "__SHEET__", + "type": "text", + "label": "Sheet" + }, + { + "name": "0", + "type": "text", + "label": "Profiles (A)" + }, + { + "name": "1", + "type": "text", + "label": "(B)" + }, + { + "name": "2", + "type": "text", + "label": "(C)" + }, + { + "name": "3", + "type": "text", + "label": "(D)" + }, + { + "name": "4", + "type": "text", + "label": "(E)" + }, + { + "name": "5", + "type": "text", + "label": "(F)" + }, + { + "name": "6", + "type": "text", + "label": "(G)" + }, + { + "name": "7", + "type": "text", + "label": "(H)" + }, + { + "name": "8", + "type": "text", + "label": "(I)" + }, + { + "name": "9", + "type": "text", + "label": "(J)" + }, + { + "name": "10", + "type": "text", + "label": "(K)" + }, + { + "name": "11", + "type": "text", + "label": "(L)" + }, + { + "name": "12", + "type": "text", + "label": "(M)" + }, + { + "name": "13", + "type": "text", + "label": "(N)" + }, + { + "name": "14", + "type": "text", + "label": "(O)" + }, + { + "name": "15", + "type": "text", + "label": "(P)" + }, + { + "name": "16", + "type": "text", + "label": "(Q)" + }, + { + "name": "17", + "type": "text", + "label": "(R)" + }, + { + "name": "18", + "type": "text", + "label": "(S)" + }, + { + "name": "19", + "type": "text", + "label": "(T)" + }, + { + "name": "20", + "type": "text", + "label": "(U)" + }, + { + "name": "21", + "type": "text", + "label": "(V)" + }, + { + "name": "22", + "type": "text", + "label": "(W)" + }, + { + "name": "23", + "type": "text", + "label": "(X)" + }, + { + "name": "24", + "type": "text", + "label": "(Y)" + }, + { + "name": "25", + "type": "text", + "label": "(Z)" + } + ] + } + }, + { + "id": 2, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "mapper": { + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/studios/a9c49c37-7547-4fc9-85b6-416d9983df93/trigger_limited", + "serializeUrl": false, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/JSON" + }, + { + "name": "Authorization", + "value": "" + } + ], + "qs": [], + "bodyType": "raw", + "parseResponse": false, + "authUser": "", + "authPass": "", + "timeout": "", + "shareCookies": false, + "ca": "", + "rejectUnauthorized": true, + "followRedirect": true, + "useQuerystring": false, + "gzip": true, + "useMtls": false, + "contentType": "application/json", + "data": "{\"params\":{\"linkedin\":[\"{{1.`0`}}\"]},\"project\":\"b7405bf3cbe3-414d-9074-fdd2876196f0\"}", + "followAllRedirects": false + }, + "metadata": { + "designer": { + "x": 180, + "y": -4 + }, + "restore": { + "expect": { + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "qs": { + "mode": "chose" + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "type": "array", + "label": "Headers", + "spec": [ + { + "name": "name", + "label": "Name", + "type": "text", + "required": true + }, + { + "name": "value", + "label": "Value", + "type": "text" + } + ] + }, + { + "name": "qs", + "type": "array", + "label": "Query String", + "spec": [ + { + "name": "name", + "label": "Name", + "type": "text", + "required": true + }, + { + "name": "value", + "label": "Value", + "type": "text" + } + ] + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ], + "metadata": { + "instant": false, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Scrape Linkedin profiles (updates airtable + relevance knowledge base).json b/backend/data/Scrape Linkedin profiles (updates airtable + relevance knowledge base).json new file mode 100644 index 0000000000000000000000000000000000000000..df27f6883bc89df0f99a5f85707ab0eb7503ef29 --- /dev/null +++ b/backend/data/Scrape Linkedin profiles (updates airtable + relevance knowledge base).json @@ -0,0 +1,623 @@ +{ + "name": "Scrape linkedin profiles (copy)", + "flow": [ + { + "id": 1, + "module": "google-sheets:filterRows", + "version": 2, + "parameters": { + "__IMTCONN__": 3247303 + }, + "mapper": { + "from": "drive", + "sheetId": "Sheet1", + "sortOrder": "asc", + "spreadsheetId": "1--UuICEBMFI9tzPAYcgt0-m5i0fWlSqN-HSFCv2gKJY", + "tableFirstRow": "A1:Z1", + "includesHeaders": true, + "valueRenderOption": "FORMATTED_VALUE", + "dateTimeRenderOption": "FORMATTED_STRING" + }, + "metadata": { + "designer": { + "x": -142, + "y": 0 + }, + "restore": { + "expect": { + "from": { + "label": "Select from My Drive" + }, + "orderBy": { + "mode": "chose" + }, + "sheetId": { + "mode": "chose", + "label": "Sheet1" + }, + "sortOrder": { + "mode": "chose", + "label": "Ascending" + }, + "spreadsheetId": { + "mode": "chose", + "label": "Linkedin profiles" + }, + "tableFirstRow": { + "label": "A-Z" + }, + "includesHeaders": { + "mode": "chose", + "label": "Yes" + }, + "valueRenderOption": { + "mode": "chose", + "label": "Formatted value" + }, + "dateTimeRenderOption": { + "mode": "chose", + "label": "Formatted string" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (ben@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "from", + "type": "select", + "label": "Search Method", + "required": true, + "validate": { + "enum": [ + "drive", + "share" + ] + } + }, + { + "name": "valueRenderOption", + "type": "select", + "label": "Value render option", + "validate": { + "enum": [ + "FORMATTED_VALUE", + "UNFORMATTED_VALUE", + "FORMULA" + ] + } + }, + { + "name": "dateTimeRenderOption", + "type": "select", + "label": "Date and time render option", + "validate": { + "enum": [ + "SERIAL_NUMBER", + "FORMATTED_STRING" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "spreadsheetId", + "type": "select", + "label": "Spreadsheet ID", + "required": true + }, + { + "name": "sheetId", + "type": "select", + "label": "Sheet Name", + "required": true + }, + { + "name": "includesHeaders", + "type": "select", + "label": "Table contains headers", + "required": true, + "validate": { + "enum": [ + true, + false + ] + } + }, + { + "name": "tableFirstRow", + "type": "select", + "label": "Column range", + "required": true, + "validate": { + "enum": [ + "A1:Z1", + "A1:BZ1", + "A1:CZ1", + "A1:DZ1", + "A1:MZ1", + "A1:ZZ1", + "A1:AZZ1", + "A1:BZZ1", + "A1:CZZ1", + "A1:DZZ1", + "A1:MZZ1", + "A1:ZZZ1" + ] + } + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": "rpc://google-sheets/2/rpcGetFilterKeys?includesHeaders=true" + }, + { + "name": "orderBy", + "type": "select", + "label": "Order by" + }, + { + "name": "sortOrder", + "type": "select", + "label": "Sort order", + "validate": { + "enum": [ + "asc", + "desc" + ] + } + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "__ROW_NUMBER__", + "type": "number", + "label": "Row number" + }, + { + "name": "__SPREADSHEET_ID__", + "type": "text", + "label": "Spreadsheet ID" + }, + { + "name": "__SHEET__", + "type": "text", + "label": "Sheet" + }, + { + "name": "0", + "type": "text", + "label": "Profiles (A)" + }, + { + "name": "1", + "type": "text", + "label": "(B)" + }, + { + "name": "2", + "type": "text", + "label": "(C)" + }, + { + "name": "3", + "type": "text", + "label": "(D)" + }, + { + "name": "4", + "type": "text", + "label": "(E)" + }, + { + "name": "5", + "type": "text", + "label": "(F)" + }, + { + "name": "6", + "type": "text", + "label": "(G)" + }, + { + "name": "7", + "type": "text", + "label": "(H)" + }, + { + "name": "8", + "type": "text", + "label": "(I)" + }, + { + "name": "9", + "type": "text", + "label": "(J)" + }, + { + "name": "10", + "type": "text", + "label": "(K)" + }, + { + "name": "11", + "type": "text", + "label": "(L)" + }, + { + "name": "12", + "type": "text", + "label": "(M)" + }, + { + "name": "13", + "type": "text", + "label": "(N)" + }, + { + "name": "14", + "type": "text", + "label": "(O)" + }, + { + "name": "15", + "type": "text", + "label": "(P)" + }, + { + "name": "16", + "type": "text", + "label": "(Q)" + }, + { + "name": "17", + "type": "text", + "label": "(R)" + }, + { + "name": "18", + "type": "text", + "label": "(S)" + }, + { + "name": "19", + "type": "text", + "label": "(T)" + }, + { + "name": "20", + "type": "text", + "label": "(U)" + }, + { + "name": "21", + "type": "text", + "label": "(V)" + }, + { + "name": "22", + "type": "text", + "label": "(W)" + }, + { + "name": "23", + "type": "text", + "label": "(X)" + }, + { + "name": "24", + "type": "text", + "label": "(Y)" + }, + { + "name": "25", + "type": "text", + "label": "(Z)" + } + ] + } + }, + { + "id": 2, + "module": "http:ActionSendData", + "version": 3, + "parameters": { + "handleErrors": true, + "useNewZLibDeCompress": true + }, + "mapper": { + "url": "https://api-d7b62b.stack.tryrelevance.com/latest/studios/a9c49c37-7547-4fc9-85b6-416d9983df93/trigger_limited", + "serializeUrl": false, + "method": "post", + "headers": [ + { + "name": "Content-Type", + "value": "application/JSON" + }, + { + "name": "Authorization", + "value": "" + } + ], + "qs": [], + "bodyType": "raw", + "parseResponse": false, + "authUser": "", + "authPass": "", + "timeout": "", + "shareCookies": false, + "ca": "", + "rejectUnauthorized": true, + "followRedirect": true, + "useQuerystring": false, + "gzip": true, + "useMtls": false, + "contentType": "application/json", + "data": "{\"params\":{\"linkedin\":[\"{{1.`0`}}\"]},\"project\":\"b7405bf3cbe3-414d-9074-fdd2876196f0\"}", + "followAllRedirects": false + }, + "metadata": { + "designer": { + "x": 180, + "y": -4 + }, + "restore": { + "expect": { + "method": { + "mode": "chose", + "label": "POST" + }, + "headers": { + "mode": "chose", + "items": [ + null, + null + ] + }, + "qs": { + "mode": "chose" + }, + "bodyType": { + "label": "Raw" + }, + "contentType": { + "label": "JSON (application/json)" + } + } + }, + "parameters": [ + { + "name": "handleErrors", + "type": "boolean", + "label": "Evaluate all states as errors (except for 2xx and 3xx )", + "required": true + }, + { + "name": "useNewZLibDeCompress", + "type": "hidden" + } + ], + "expect": [ + { + "name": "url", + "type": "url", + "label": "URL", + "required": true + }, + { + "name": "serializeUrl", + "type": "boolean", + "label": "Serialize URL", + "required": true + }, + { + "name": "method", + "type": "select", + "label": "Method", + "required": true, + "validate": { + "enum": [ + "get", + "head", + "post", + "put", + "patch", + "delete", + "options" + ] + } + }, + { + "name": "headers", + "type": "array", + "label": "Headers", + "spec": [ + { + "name": "name", + "label": "Name", + "type": "text", + "required": true + }, + { + "name": "value", + "label": "Value", + "type": "text" + } + ] + }, + { + "name": "qs", + "type": "array", + "label": "Query String", + "spec": [ + { + "name": "name", + "label": "Name", + "type": "text", + "required": true + }, + { + "name": "value", + "label": "Value", + "type": "text" + } + ] + }, + { + "name": "bodyType", + "type": "select", + "label": "Body type", + "validate": { + "enum": [ + "raw", + "x_www_form_urlencoded", + "multipart_form_data" + ] + } + }, + { + "name": "parseResponse", + "type": "boolean", + "label": "Parse response", + "required": true + }, + { + "name": "authUser", + "type": "text", + "label": "User name" + }, + { + "name": "authPass", + "type": "password", + "label": "Password" + }, + { + "name": "timeout", + "type": "uinteger", + "label": "Timeout", + "validate": { + "max": 300, + "min": 1 + } + }, + { + "name": "shareCookies", + "type": "boolean", + "label": "Share cookies with other HTTP modules", + "required": true + }, + { + "name": "ca", + "type": "cert", + "label": "Self-signed certificate" + }, + { + "name": "rejectUnauthorized", + "type": "boolean", + "label": "Reject connections that are using unverified (self-signed) certificates", + "required": true + }, + { + "name": "followRedirect", + "type": "boolean", + "label": "Follow redirect", + "required": true + }, + { + "name": "useQuerystring", + "type": "boolean", + "label": "Disable serialization of multiple same query string keys as arrays", + "required": true + }, + { + "name": "gzip", + "type": "boolean", + "label": "Request compressed content", + "required": true + }, + { + "name": "useMtls", + "type": "boolean", + "label": "Use Mutual TLS", + "required": true + }, + { + "name": "contentType", + "type": "select", + "label": "Content type", + "validate": { + "enum": [ + "text/plain", + "application/json", + "application/xml", + "text/xml", + "text/html", + "custom" + ] + } + }, + { + "name": "data", + "type": "buffer", + "label": "Request content" + }, + { + "name": "followAllRedirects", + "type": "boolean", + "label": "Follow all redirect", + "required": true + } + ] + } + } + ], + "metadata": { + "instant": false, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Scrape youtube videos and upload to openai vector store (1).json b/backend/data/Scrape youtube videos and upload to openai vector store (1).json new file mode 100644 index 0000000000000000000000000000000000000000..3fed5d947a9f650d0c18e7d35a0f81f750a3f336 --- /dev/null +++ b/backend/data/Scrape youtube videos and upload to openai vector store (1).json @@ -0,0 +1,1209 @@ +{ + "name": "Upload data to openai vector store", + "flow": [ + { + "id": 3, + "module": "google-sheets:filterRows", + "version": 2, + "parameters": { + "__IMTCONN__": 2417312 + }, + "mapper": { + "from": "drive", + "sheetId": "Sheet1", + "sortOrder": "desc", + "spreadsheetId": "1a0_tf-U6f_kSEoQgWZo0om_LjO7sHW0agBlzD7frzb4", + "tableFirstRow": "A1:CZ1", + "includesHeaders": true, + "valueRenderOption": "FORMATTED_VALUE", + "dateTimeRenderOption": "FORMATTED_STRING" + }, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "expect": { + "from": { + "label": "Select from My Drive" + }, + "orderBy": { + "mode": "chose", + "label": "Empty" + }, + "sheetId": { + "mode": "chose", + "label": "Sheet1" + }, + "sortOrder": { + "mode": "chose", + "label": "Descending" + }, + "spreadsheetId": { + "mode": "chose", + "label": "Youtube links" + }, + "tableFirstRow": { + "label": "A-CZ" + }, + "includesHeaders": { + "mode": "chose", + "label": "Yes" + }, + "valueRenderOption": { + "mode": "chose", + "label": "Formatted value" + }, + "dateTimeRenderOption": { + "mode": "chose", + "label": "Formatted string" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (oskar@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "from", + "type": "select", + "label": "Search Method", + "required": true, + "validate": { + "enum": [ + "drive", + "share" + ] + } + }, + { + "name": "valueRenderOption", + "type": "select", + "label": "Value render option", + "validate": { + "enum": [ + "FORMATTED_VALUE", + "UNFORMATTED_VALUE", + "FORMULA" + ] + } + }, + { + "name": "dateTimeRenderOption", + "type": "select", + "label": "Date and time render option", + "validate": { + "enum": [ + "SERIAL_NUMBER", + "FORMATTED_STRING" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "spreadsheetId", + "type": "select", + "label": "Spreadsheet ID", + "required": true + }, + { + "name": "sheetId", + "type": "select", + "label": "Sheet Name", + "required": true + }, + { + "name": "includesHeaders", + "type": "select", + "label": "Table contains headers", + "required": true, + "validate": { + "enum": [ + true, + false + ] + } + }, + { + "name": "tableFirstRow", + "type": "select", + "label": "Column range", + "required": true, + "validate": { + "enum": [ + "A1:Z1", + "A1:BZ1", + "A1:CZ1", + "A1:DZ1", + "A1:MZ1", + "A1:ZZ1", + "A1:AZZ1", + "A1:BZZ1", + "A1:CZZ1", + "A1:DZZ1", + "A1:MZZ1", + "A1:ZZZ1" + ] + } + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": "rpc://google-sheets/2/rpcGetFilterKeys?includesHeaders=true" + }, + { + "name": "orderBy", + "type": "select", + "label": "Order by" + }, + { + "name": "sortOrder", + "type": "select", + "label": "Sort order", + "validate": { + "enum": [ + "asc", + "desc" + ] + } + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "__ROW_NUMBER__", + "type": "number", + "label": "Row number" + }, + { + "name": "__SPREADSHEET_ID__", + "type": "text", + "label": "Spreadsheet ID" + }, + { + "name": "__SHEET__", + "type": "text", + "label": "Sheet" + }, + { + "name": "0", + "type": "text", + "label": "links (A)" + }, + { + "name": "1", + "type": "text", + "label": "(B)" + }, + { + "name": "2", + "type": "text", + "label": "(C)" + }, + { + "name": "3", + "type": "text", + "label": "(D)" + }, + { + "name": "4", + "type": "text", + "label": "(E)" + }, + { + "name": "5", + "type": "text", + "label": "(F)" + }, + { + "name": "6", + "type": "text", + "label": "(G)" + }, + { + "name": "7", + "type": "text", + "label": "(H)" + }, + { + "name": "8", + "type": "text", + "label": "(I)" + }, + { + "name": "9", + "type": "text", + "label": "(J)" + }, + { + "name": "10", + "type": "text", + "label": "(K)" + }, + { + "name": "11", + "type": "text", + "label": "(L)" + }, + { + "name": "12", + "type": "text", + "label": "(M)" + }, + { + "name": "13", + "type": "text", + "label": "(N)" + }, + { + "name": "14", + "type": "text", + "label": "(O)" + }, + { + "name": "15", + "type": "text", + "label": "(P)" + }, + { + "name": "16", + "type": "text", + "label": "(Q)" + }, + { + "name": "17", + "type": "text", + "label": "(R)" + }, + { + "name": "18", + "type": "text", + "label": "(S)" + }, + { + "name": "19", + "type": "text", + "label": "(T)" + }, + { + "name": "20", + "type": "text", + "label": "(U)" + }, + { + "name": "21", + "type": "text", + "label": "(V)" + }, + { + "name": "22", + "type": "text", + "label": "(W)" + }, + { + "name": "23", + "type": "text", + "label": "(X)" + }, + { + "name": "24", + "type": "text", + "label": "(Y)" + }, + { + "name": "25", + "type": "text", + "label": "(Z)" + }, + { + "name": "26", + "type": "text", + "label": "(AA)" + }, + { + "name": "27", + "type": "text", + "label": "(AB)" + }, + { + "name": "28", + "type": "text", + "label": "(AC)" + }, + { + "name": "29", + "type": "text", + "label": "(AD)" + }, + { + "name": "30", + "type": "text", + "label": "(AE)" + }, + { + "name": "31", + "type": "text", + "label": "(AF)" + }, + { + "name": "32", + "type": "text", + "label": "(AG)" + }, + { + "name": "33", + "type": "text", + "label": "(AH)" + }, + { + "name": "34", + "type": "text", + "label": "(AI)" + }, + { + "name": "35", + "type": "text", + "label": "(AJ)" + }, + { + "name": "36", + "type": "text", + "label": "(AK)" + }, + { + "name": "37", + "type": "text", + "label": "(AL)" + }, + { + "name": "38", + "type": "text", + "label": "(AM)" + }, + { + "name": "39", + "type": "text", + "label": "(AN)" + }, + { + "name": "40", + "type": "text", + "label": "(AO)" + }, + { + "name": "41", + "type": "text", + "label": "(AP)" + }, + { + "name": "42", + "type": "text", + "label": "(AQ)" + }, + { + "name": "43", + "type": "text", + "label": "(AR)" + }, + { + "name": "44", + "type": "text", + "label": "(AS)" + }, + { + "name": "45", + "type": "text", + "label": "(AT)" + }, + { + "name": "46", + "type": "text", + "label": "(AU)" + }, + { + "name": "47", + "type": "text", + "label": "(AV)" + }, + { + "name": "48", + "type": "text", + "label": "(AW)" + }, + { + "name": "49", + "type": "text", + "label": "(AX)" + }, + { + "name": "50", + "type": "text", + "label": "(AY)" + }, + { + "name": "51", + "type": "text", + "label": "(AZ)" + }, + { + "name": "52", + "type": "text", + "label": "(BA)" + }, + { + "name": "53", + "type": "text", + "label": "(BB)" + }, + { + "name": "54", + "type": "text", + "label": "(BC)" + }, + { + "name": "55", + "type": "text", + "label": "(BD)" + }, + { + "name": "56", + "type": "text", + "label": "(BE)" + }, + { + "name": "57", + "type": "text", + "label": "(BF)" + }, + { + "name": "58", + "type": "text", + "label": "(BG)" + }, + { + "name": "59", + "type": "text", + "label": "(BH)" + }, + { + "name": "60", + "type": "text", + "label": "(BI)" + }, + { + "name": "61", + "type": "text", + "label": "(BJ)" + }, + { + "name": "62", + "type": "text", + "label": "(BK)" + }, + { + "name": "63", + "type": "text", + "label": "(BL)" + }, + { + "name": "64", + "type": "text", + "label": "(BM)" + }, + { + "name": "65", + "type": "text", + "label": "(BN)" + }, + { + "name": "66", + "type": "text", + "label": "(BO)" + }, + { + "name": "67", + "type": "text", + "label": "(BP)" + }, + { + "name": "68", + "type": "text", + "label": "(BQ)" + }, + { + "name": "69", + "type": "text", + "label": "(BR)" + }, + { + "name": "70", + "type": "text", + "label": "(BS)" + }, + { + "name": "71", + "type": "text", + "label": "(BT)" + }, + { + "name": "72", + "type": "text", + "label": "(BU)" + }, + { + "name": "73", + "type": "text", + "label": "(BV)" + }, + { + "name": "74", + "type": "text", + "label": "(BW)" + }, + { + "name": "75", + "type": "text", + "label": "(BX)" + }, + { + "name": "76", + "type": "text", + "label": "(BY)" + }, + { + "name": "77", + "type": "text", + "label": "(BZ)" + }, + { + "name": "78", + "type": "text", + "label": "(CA)" + }, + { + "name": "79", + "type": "text", + "label": "(CB)" + }, + { + "name": "80", + "type": "text", + "label": "(CC)" + }, + { + "name": "81", + "type": "text", + "label": "(CD)" + }, + { + "name": "82", + "type": "text", + "label": "(CE)" + }, + { + "name": "83", + "type": "text", + "label": "(CF)" + }, + { + "name": "84", + "type": "text", + "label": "(CG)" + }, + { + "name": "85", + "type": "text", + "label": "(CH)" + }, + { + "name": "86", + "type": "text", + "label": "(CI)" + }, + { + "name": "87", + "type": "text", + "label": "(CJ)" + }, + { + "name": "88", + "type": "text", + "label": "(CK)" + }, + { + "name": "89", + "type": "text", + "label": "(CL)" + }, + { + "name": "90", + "type": "text", + "label": "(CM)" + }, + { + "name": "91", + "type": "text", + "label": "(CN)" + }, + { + "name": "92", + "type": "text", + "label": "(CO)" + }, + { + "name": "93", + "type": "text", + "label": "(CP)" + }, + { + "name": "94", + "type": "text", + "label": "(CQ)" + }, + { + "name": "95", + "type": "text", + "label": "(CR)" + }, + { + "name": "96", + "type": "text", + "label": "(CS)" + }, + { + "name": "97", + "type": "text", + "label": "(CT)" + }, + { + "name": "98", + "type": "text", + "label": "(CU)" + }, + { + "name": "99", + "type": "text", + "label": "(CV)" + }, + { + "name": "100", + "type": "text", + "label": "(CW)" + }, + { + "name": "101", + "type": "text", + "label": "(CX)" + }, + { + "name": "102", + "type": "text", + "label": "(CY)" + }, + { + "name": "103", + "type": "text", + "label": "(CZ)" + } + ] + } + }, + { + "id": 4, + "module": "dumplingai:getYoutubeTranscript", + "version": 1, + "parameters": { + "__IMTCONN__": 3389613 + }, + "mapper": { + "videoUrl": "{{3.`0`}}", + "includeTimestamps": false, + "preferredLanguage": "en", + "timestampsToCombine": "5" + }, + "metadata": { + "designer": { + "x": 295, + "y": -3 + }, + "restore": { + "expect": { + "includeTimestamps": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "dumplingai" + }, + "label": "My Dumpling AI connection (Make.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:dumplingai", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "videoUrl", + "type": "text", + "label": "YouTube Video URL", + "required": true + }, + { + "name": "includeTimestamps", + "type": "boolean", + "label": "Include timestamps", + "required": true + }, + { + "name": "timestampsToCombine", + "type": "number", + "label": "Timestamps to combine", + "required": true + }, + { + "name": "preferredLanguage", + "type": "text", + "label": "Preferred Language" + } + ] + } + }, + { + "id": 5, + "module": "google-drive:createAFileFromText", + "version": 4, + "parameters": { + "__IMTCONN__": 3704260 + }, + "mapper": { + "name": "{{3.`0`}}", + "content": "{{4.transcript}}", + "convert": false, + "folderId": "/", + "destination": "drive" + }, + "metadata": { + "designer": { + "x": 559, + "y": -2 + }, + "restore": { + "expect": { + "folderId": { + "mode": "chose", + "path": [ + "/" + ] + }, + "destination": { + "label": "My Drive" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google-restricted" + }, + "label": "My Google Restricted connection (oskar@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google-restricted", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "destination", + "type": "select", + "label": "Choose a Drive", + "required": true, + "validate": { + "enum": [ + "drive", + "share", + "team" + ] + } + }, + { + "name": "name", + "type": "text", + "label": "File Name", + "required": true + }, + { + "name": "content", + "type": "text", + "label": "File Content", + "required": true + }, + { + "name": "convert", + "type": "boolean", + "label": "Convert the File to Google Docs Document", + "required": true + }, + { + "name": "folderId", + "type": "folder", + "label": "New Text File Location", + "required": true + } + ] + } + }, + { + "id": 6, + "module": "google-drive:getAFile", + "version": 4, + "parameters": { + "__IMTCONN__": 3704260 + }, + "mapper": { + "file": "{{5.id}}", + "select": "map", + "formatDrawings": "image/jpeg", + "formatDocuments": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "formatSpreadsheets": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "formatPresentations": "application/vnd.openxmlformats-officedocument.presentationml.presentation" + }, + "metadata": { + "designer": { + "x": 869, + "y": -4 + }, + "restore": { + "expect": { + "select": { + "label": "Enter manually" + }, + "formatDrawings": { + "label": "JPEG" + }, + "formatDocuments": { + "label": "MS Word Document" + }, + "formatSpreadsheets": { + "label": "MS Excel" + }, + "formatPresentations": { + "label": "MS PowerPoint" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "false", + "connection": "google-restricted" + }, + "label": "My Google Restricted connection (oskar@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google-restricted", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "select", + "type": "select", + "label": "Enter a File ID", + "required": true, + "validate": { + "enum": [ + "map", + "value" + ] + } + }, + { + "name": "formatDocuments", + "type": "select", + "label": "Convert Google Documents Files to Format", + "required": true, + "validate": { + "enum": [ + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/pdf", + "application/vnd.oasis.opendocument.text", + "text/html", + "text/plain", + "application/rtf" + ] + } + }, + { + "name": "formatSpreadsheets", + "type": "select", + "label": "Convert Google Spreadsheets Files to Format", + "required": true, + "validate": { + "enum": [ + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "application/x-vnd.oasis.opendocument.spreadsheet", + "application/pdf" + ] + } + }, + { + "name": "formatPresentations", + "type": "select", + "label": "Convert Google Slides Files to Format", + "required": true, + "validate": { + "enum": [ + "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "application/pdf" + ] + } + }, + { + "name": "formatDrawings", + "type": "select", + "label": "Convert Google Drawings Files to Format", + "required": true, + "validate": { + "enum": [ + "image/jpeg", + "image/png", + "image/svg+xml", + "application/pdf" + ] + } + }, + { + "name": "file", + "type": "text", + "label": "File ID", + "required": true + } + ] + } + }, + { + "id": 7, + "module": "openai-gpt-3:uploadFile", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "purpose": "assistants", + "fileData": "{{6.data}}", + "fileName": "{{6.name}}" + }, + "metadata": { + "designer": { + "x": 1129, + "y": -6 + }, + "restore": { + "expect": { + "purpose": { + "mode": "chose", + "label": "Assistants" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "text", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "purpose", + "type": "select", + "label": "Purpose", + "required": true, + "validate": { + "enum": [ + "assistants", + "vision", + "fine-tune", + "batch" + ] + } + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:createVectorStoreFileBatch", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "fileIds": "{{7.id}}", + "createMode": "choose", + "vectorStoreId": "vs_21jPBia17n3Lz5piiGnccKC9" + }, + "metadata": { + "designer": { + "x": 1397, + "y": -7 + }, + "restore": { + "expect": { + "fileIds": { + "mode": "edit" + }, + "createMode": { + "mode": "chose", + "label": "Choose Vector Store" + }, + "vectorStoreId": { + "mode": "chose", + "label": "Ben AI knowledge" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "createMode", + "type": "select", + "label": "Batch Create Mode", + "required": true, + "validate": { + "enum": [ + "choose", + "create" + ] + } + }, + { + "name": "fileIds", + "type": "select", + "label": "File IDs", + "multiple": true, + "required": true + }, + { + "name": "vectorStoreId", + "type": "select", + "label": "Vector Store ID", + "required": true + } + ] + } + } + ], + "metadata": { + "instant": false, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Scrape youtube videos and upload to openai vector store.json b/backend/data/Scrape youtube videos and upload to openai vector store.json new file mode 100644 index 0000000000000000000000000000000000000000..3fed5d947a9f650d0c18e7d35a0f81f750a3f336 --- /dev/null +++ b/backend/data/Scrape youtube videos and upload to openai vector store.json @@ -0,0 +1,1209 @@ +{ + "name": "Upload data to openai vector store", + "flow": [ + { + "id": 3, + "module": "google-sheets:filterRows", + "version": 2, + "parameters": { + "__IMTCONN__": 2417312 + }, + "mapper": { + "from": "drive", + "sheetId": "Sheet1", + "sortOrder": "desc", + "spreadsheetId": "1a0_tf-U6f_kSEoQgWZo0om_LjO7sHW0agBlzD7frzb4", + "tableFirstRow": "A1:CZ1", + "includesHeaders": true, + "valueRenderOption": "FORMATTED_VALUE", + "dateTimeRenderOption": "FORMATTED_STRING" + }, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "expect": { + "from": { + "label": "Select from My Drive" + }, + "orderBy": { + "mode": "chose", + "label": "Empty" + }, + "sheetId": { + "mode": "chose", + "label": "Sheet1" + }, + "sortOrder": { + "mode": "chose", + "label": "Descending" + }, + "spreadsheetId": { + "mode": "chose", + "label": "Youtube links" + }, + "tableFirstRow": { + "label": "A-CZ" + }, + "includesHeaders": { + "mode": "chose", + "label": "Yes" + }, + "valueRenderOption": { + "mode": "chose", + "label": "Formatted value" + }, + "dateTimeRenderOption": { + "mode": "chose", + "label": "Formatted string" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google" + }, + "label": "My Google connection (oskar@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "from", + "type": "select", + "label": "Search Method", + "required": true, + "validate": { + "enum": [ + "drive", + "share" + ] + } + }, + { + "name": "valueRenderOption", + "type": "select", + "label": "Value render option", + "validate": { + "enum": [ + "FORMATTED_VALUE", + "UNFORMATTED_VALUE", + "FORMULA" + ] + } + }, + { + "name": "dateTimeRenderOption", + "type": "select", + "label": "Date and time render option", + "validate": { + "enum": [ + "SERIAL_NUMBER", + "FORMATTED_STRING" + ] + } + }, + { + "name": "limit", + "type": "uinteger", + "label": "Limit" + }, + { + "name": "spreadsheetId", + "type": "select", + "label": "Spreadsheet ID", + "required": true + }, + { + "name": "sheetId", + "type": "select", + "label": "Sheet Name", + "required": true + }, + { + "name": "includesHeaders", + "type": "select", + "label": "Table contains headers", + "required": true, + "validate": { + "enum": [ + true, + false + ] + } + }, + { + "name": "tableFirstRow", + "type": "select", + "label": "Column range", + "required": true, + "validate": { + "enum": [ + "A1:Z1", + "A1:BZ1", + "A1:CZ1", + "A1:DZ1", + "A1:MZ1", + "A1:ZZ1", + "A1:AZZ1", + "A1:BZZ1", + "A1:CZZ1", + "A1:DZZ1", + "A1:MZZ1", + "A1:ZZZ1" + ] + } + }, + { + "name": "filter", + "type": "filter", + "label": "Filter", + "options": "rpc://google-sheets/2/rpcGetFilterKeys?includesHeaders=true" + }, + { + "name": "orderBy", + "type": "select", + "label": "Order by" + }, + { + "name": "sortOrder", + "type": "select", + "label": "Sort order", + "validate": { + "enum": [ + "asc", + "desc" + ] + } + } + ], + "interface": [ + { + "name": "__IMTLENGTH__", + "type": "uinteger", + "label": "Total number of bundles" + }, + { + "name": "__IMTINDEX__", + "type": "uinteger", + "label": "Bundle order position" + }, + { + "name": "__ROW_NUMBER__", + "type": "number", + "label": "Row number" + }, + { + "name": "__SPREADSHEET_ID__", + "type": "text", + "label": "Spreadsheet ID" + }, + { + "name": "__SHEET__", + "type": "text", + "label": "Sheet" + }, + { + "name": "0", + "type": "text", + "label": "links (A)" + }, + { + "name": "1", + "type": "text", + "label": "(B)" + }, + { + "name": "2", + "type": "text", + "label": "(C)" + }, + { + "name": "3", + "type": "text", + "label": "(D)" + }, + { + "name": "4", + "type": "text", + "label": "(E)" + }, + { + "name": "5", + "type": "text", + "label": "(F)" + }, + { + "name": "6", + "type": "text", + "label": "(G)" + }, + { + "name": "7", + "type": "text", + "label": "(H)" + }, + { + "name": "8", + "type": "text", + "label": "(I)" + }, + { + "name": "9", + "type": "text", + "label": "(J)" + }, + { + "name": "10", + "type": "text", + "label": "(K)" + }, + { + "name": "11", + "type": "text", + "label": "(L)" + }, + { + "name": "12", + "type": "text", + "label": "(M)" + }, + { + "name": "13", + "type": "text", + "label": "(N)" + }, + { + "name": "14", + "type": "text", + "label": "(O)" + }, + { + "name": "15", + "type": "text", + "label": "(P)" + }, + { + "name": "16", + "type": "text", + "label": "(Q)" + }, + { + "name": "17", + "type": "text", + "label": "(R)" + }, + { + "name": "18", + "type": "text", + "label": "(S)" + }, + { + "name": "19", + "type": "text", + "label": "(T)" + }, + { + "name": "20", + "type": "text", + "label": "(U)" + }, + { + "name": "21", + "type": "text", + "label": "(V)" + }, + { + "name": "22", + "type": "text", + "label": "(W)" + }, + { + "name": "23", + "type": "text", + "label": "(X)" + }, + { + "name": "24", + "type": "text", + "label": "(Y)" + }, + { + "name": "25", + "type": "text", + "label": "(Z)" + }, + { + "name": "26", + "type": "text", + "label": "(AA)" + }, + { + "name": "27", + "type": "text", + "label": "(AB)" + }, + { + "name": "28", + "type": "text", + "label": "(AC)" + }, + { + "name": "29", + "type": "text", + "label": "(AD)" + }, + { + "name": "30", + "type": "text", + "label": "(AE)" + }, + { + "name": "31", + "type": "text", + "label": "(AF)" + }, + { + "name": "32", + "type": "text", + "label": "(AG)" + }, + { + "name": "33", + "type": "text", + "label": "(AH)" + }, + { + "name": "34", + "type": "text", + "label": "(AI)" + }, + { + "name": "35", + "type": "text", + "label": "(AJ)" + }, + { + "name": "36", + "type": "text", + "label": "(AK)" + }, + { + "name": "37", + "type": "text", + "label": "(AL)" + }, + { + "name": "38", + "type": "text", + "label": "(AM)" + }, + { + "name": "39", + "type": "text", + "label": "(AN)" + }, + { + "name": "40", + "type": "text", + "label": "(AO)" + }, + { + "name": "41", + "type": "text", + "label": "(AP)" + }, + { + "name": "42", + "type": "text", + "label": "(AQ)" + }, + { + "name": "43", + "type": "text", + "label": "(AR)" + }, + { + "name": "44", + "type": "text", + "label": "(AS)" + }, + { + "name": "45", + "type": "text", + "label": "(AT)" + }, + { + "name": "46", + "type": "text", + "label": "(AU)" + }, + { + "name": "47", + "type": "text", + "label": "(AV)" + }, + { + "name": "48", + "type": "text", + "label": "(AW)" + }, + { + "name": "49", + "type": "text", + "label": "(AX)" + }, + { + "name": "50", + "type": "text", + "label": "(AY)" + }, + { + "name": "51", + "type": "text", + "label": "(AZ)" + }, + { + "name": "52", + "type": "text", + "label": "(BA)" + }, + { + "name": "53", + "type": "text", + "label": "(BB)" + }, + { + "name": "54", + "type": "text", + "label": "(BC)" + }, + { + "name": "55", + "type": "text", + "label": "(BD)" + }, + { + "name": "56", + "type": "text", + "label": "(BE)" + }, + { + "name": "57", + "type": "text", + "label": "(BF)" + }, + { + "name": "58", + "type": "text", + "label": "(BG)" + }, + { + "name": "59", + "type": "text", + "label": "(BH)" + }, + { + "name": "60", + "type": "text", + "label": "(BI)" + }, + { + "name": "61", + "type": "text", + "label": "(BJ)" + }, + { + "name": "62", + "type": "text", + "label": "(BK)" + }, + { + "name": "63", + "type": "text", + "label": "(BL)" + }, + { + "name": "64", + "type": "text", + "label": "(BM)" + }, + { + "name": "65", + "type": "text", + "label": "(BN)" + }, + { + "name": "66", + "type": "text", + "label": "(BO)" + }, + { + "name": "67", + "type": "text", + "label": "(BP)" + }, + { + "name": "68", + "type": "text", + "label": "(BQ)" + }, + { + "name": "69", + "type": "text", + "label": "(BR)" + }, + { + "name": "70", + "type": "text", + "label": "(BS)" + }, + { + "name": "71", + "type": "text", + "label": "(BT)" + }, + { + "name": "72", + "type": "text", + "label": "(BU)" + }, + { + "name": "73", + "type": "text", + "label": "(BV)" + }, + { + "name": "74", + "type": "text", + "label": "(BW)" + }, + { + "name": "75", + "type": "text", + "label": "(BX)" + }, + { + "name": "76", + "type": "text", + "label": "(BY)" + }, + { + "name": "77", + "type": "text", + "label": "(BZ)" + }, + { + "name": "78", + "type": "text", + "label": "(CA)" + }, + { + "name": "79", + "type": "text", + "label": "(CB)" + }, + { + "name": "80", + "type": "text", + "label": "(CC)" + }, + { + "name": "81", + "type": "text", + "label": "(CD)" + }, + { + "name": "82", + "type": "text", + "label": "(CE)" + }, + { + "name": "83", + "type": "text", + "label": "(CF)" + }, + { + "name": "84", + "type": "text", + "label": "(CG)" + }, + { + "name": "85", + "type": "text", + "label": "(CH)" + }, + { + "name": "86", + "type": "text", + "label": "(CI)" + }, + { + "name": "87", + "type": "text", + "label": "(CJ)" + }, + { + "name": "88", + "type": "text", + "label": "(CK)" + }, + { + "name": "89", + "type": "text", + "label": "(CL)" + }, + { + "name": "90", + "type": "text", + "label": "(CM)" + }, + { + "name": "91", + "type": "text", + "label": "(CN)" + }, + { + "name": "92", + "type": "text", + "label": "(CO)" + }, + { + "name": "93", + "type": "text", + "label": "(CP)" + }, + { + "name": "94", + "type": "text", + "label": "(CQ)" + }, + { + "name": "95", + "type": "text", + "label": "(CR)" + }, + { + "name": "96", + "type": "text", + "label": "(CS)" + }, + { + "name": "97", + "type": "text", + "label": "(CT)" + }, + { + "name": "98", + "type": "text", + "label": "(CU)" + }, + { + "name": "99", + "type": "text", + "label": "(CV)" + }, + { + "name": "100", + "type": "text", + "label": "(CW)" + }, + { + "name": "101", + "type": "text", + "label": "(CX)" + }, + { + "name": "102", + "type": "text", + "label": "(CY)" + }, + { + "name": "103", + "type": "text", + "label": "(CZ)" + } + ] + } + }, + { + "id": 4, + "module": "dumplingai:getYoutubeTranscript", + "version": 1, + "parameters": { + "__IMTCONN__": 3389613 + }, + "mapper": { + "videoUrl": "{{3.`0`}}", + "includeTimestamps": false, + "preferredLanguage": "en", + "timestampsToCombine": "5" + }, + "metadata": { + "designer": { + "x": 295, + "y": -3 + }, + "restore": { + "expect": { + "includeTimestamps": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "dumplingai" + }, + "label": "My Dumpling AI connection (Make.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:dumplingai", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "videoUrl", + "type": "text", + "label": "YouTube Video URL", + "required": true + }, + { + "name": "includeTimestamps", + "type": "boolean", + "label": "Include timestamps", + "required": true + }, + { + "name": "timestampsToCombine", + "type": "number", + "label": "Timestamps to combine", + "required": true + }, + { + "name": "preferredLanguage", + "type": "text", + "label": "Preferred Language" + } + ] + } + }, + { + "id": 5, + "module": "google-drive:createAFileFromText", + "version": 4, + "parameters": { + "__IMTCONN__": 3704260 + }, + "mapper": { + "name": "{{3.`0`}}", + "content": "{{4.transcript}}", + "convert": false, + "folderId": "/", + "destination": "drive" + }, + "metadata": { + "designer": { + "x": 559, + "y": -2 + }, + "restore": { + "expect": { + "folderId": { + "mode": "chose", + "path": [ + "/" + ] + }, + "destination": { + "label": "My Drive" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "google-restricted" + }, + "label": "My Google Restricted connection (oskar@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google-restricted", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "destination", + "type": "select", + "label": "Choose a Drive", + "required": true, + "validate": { + "enum": [ + "drive", + "share", + "team" + ] + } + }, + { + "name": "name", + "type": "text", + "label": "File Name", + "required": true + }, + { + "name": "content", + "type": "text", + "label": "File Content", + "required": true + }, + { + "name": "convert", + "type": "boolean", + "label": "Convert the File to Google Docs Document", + "required": true + }, + { + "name": "folderId", + "type": "folder", + "label": "New Text File Location", + "required": true + } + ] + } + }, + { + "id": 6, + "module": "google-drive:getAFile", + "version": 4, + "parameters": { + "__IMTCONN__": 3704260 + }, + "mapper": { + "file": "{{5.id}}", + "select": "map", + "formatDrawings": "image/jpeg", + "formatDocuments": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "formatSpreadsheets": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "formatPresentations": "application/vnd.openxmlformats-officedocument.presentationml.presentation" + }, + "metadata": { + "designer": { + "x": 869, + "y": -4 + }, + "restore": { + "expect": { + "select": { + "label": "Enter manually" + }, + "formatDrawings": { + "label": "JPEG" + }, + "formatDocuments": { + "label": "MS Word Document" + }, + "formatSpreadsheets": { + "label": "MS Excel" + }, + "formatPresentations": { + "label": "MS PowerPoint" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "false", + "connection": "google-restricted" + }, + "label": "My Google Restricted connection (oskar@forcefactory-ai.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:google-restricted", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "type": "hidden" + }, + { + "name": "select", + "type": "select", + "label": "Enter a File ID", + "required": true, + "validate": { + "enum": [ + "map", + "value" + ] + } + }, + { + "name": "formatDocuments", + "type": "select", + "label": "Convert Google Documents Files to Format", + "required": true, + "validate": { + "enum": [ + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/pdf", + "application/vnd.oasis.opendocument.text", + "text/html", + "text/plain", + "application/rtf" + ] + } + }, + { + "name": "formatSpreadsheets", + "type": "select", + "label": "Convert Google Spreadsheets Files to Format", + "required": true, + "validate": { + "enum": [ + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "application/x-vnd.oasis.opendocument.spreadsheet", + "application/pdf" + ] + } + }, + { + "name": "formatPresentations", + "type": "select", + "label": "Convert Google Slides Files to Format", + "required": true, + "validate": { + "enum": [ + "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "application/pdf" + ] + } + }, + { + "name": "formatDrawings", + "type": "select", + "label": "Convert Google Drawings Files to Format", + "required": true, + "validate": { + "enum": [ + "image/jpeg", + "image/png", + "image/svg+xml", + "application/pdf" + ] + } + }, + { + "name": "file", + "type": "text", + "label": "File ID", + "required": true + } + ] + } + }, + { + "id": 7, + "module": "openai-gpt-3:uploadFile", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "purpose": "assistants", + "fileData": "{{6.data}}", + "fileName": "{{6.name}}" + }, + "metadata": { + "designer": { + "x": 1129, + "y": -6 + }, + "restore": { + "expect": { + "purpose": { + "mode": "chose", + "label": "Assistants" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "fileName", + "type": "text", + "label": "File Name", + "required": true + }, + { + "name": "fileData", + "type": "buffer", + "label": "File Data", + "required": true + }, + { + "name": "purpose", + "type": "select", + "label": "Purpose", + "required": true, + "validate": { + "enum": [ + "assistants", + "vision", + "fine-tune", + "batch" + ] + } + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:createVectorStoreFileBatch", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "fileIds": "{{7.id}}", + "createMode": "choose", + "vectorStoreId": "vs_21jPBia17n3Lz5piiGnccKC9" + }, + "metadata": { + "designer": { + "x": 1397, + "y": -7 + }, + "restore": { + "expect": { + "fileIds": { + "mode": "edit" + }, + "createMode": { + "mode": "chose", + "label": "Choose Vector Store" + }, + "vectorStoreId": { + "mode": "chose", + "label": "Ben AI knowledge" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + }, + "label": "My OpenAI connection" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "createMode", + "type": "select", + "label": "Batch Create Mode", + "required": true, + "validate": { + "enum": [ + "choose", + "create" + ] + } + }, + { + "name": "fileIds", + "type": "select", + "label": "File IDs", + "multiple": true, + "required": true + }, + { + "name": "vectorStoreId", + "type": "select", + "label": "Vector Store ID", + "required": true + } + ] + } + } + ], + "metadata": { + "instant": false, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Update youtube calendar (1).json b/backend/data/Update youtube calendar (1).json new file mode 100644 index 0000000000000000000000000000000000000000..aaae524a42718da6bf68a3cecce465b196741109 --- /dev/null +++ b/backend/data/Update youtube calendar (1).json @@ -0,0 +1,1418 @@ +{ + "name": "Update youtube content calendar", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1697168, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Notion to do" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "fields": { + "NUBr": "🔥", + "yjiJ": "Not started", + "title": "{{1.Task}}" + }, + "select": "list", + "database": "3b1dfa3a89954c89a8ab3743cfe05038" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "NUBr": { + "mode": "chose", + "label": "🔥" + }, + "RRsz": { + "mode": "chose" + }, + "haBT": { + "mode": "chose" + }, + "yjiJ": { + "mode": "chose", + "label": "Not started" + }, + "%5CMnU": { + "mode": "chose" + }, + "L%5Bye": { + "mode": "chose" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Idea", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "L%5Bye", + "type": "boolean", + "label": "2 hour build?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "NUBr", + "type": "select", + "label": "Potential", + "options": [ + { + "label": "Probably low", + "value": "Probably low" + }, + { + "label": "Dont know", + "value": "Dont know" + }, + { + "label": "High", + "value": "High" + }, + { + "label": "🔥", + "value": "🔥" + } + ], + "metadata": { + "type": "select" + }, + "validate": false + }, + { + "name": "RRsz", + "type": "select", + "label": "Category", + "options": [ + { + "label": "Full course", + "value": "Full course" + }, + { + "label": "Relevance AI", + "value": "Relevance AI" + }, + { + "label": "Sales", + "value": "Sales" + }, + { + "label": "Make.com", + "value": "Make.com" + }, + { + "label": "Relevance AI Tutorial", + "value": "Relevance AI Tutorial" + } + ], + "metadata": { + "type": "multi_select" + }, + "multiple": true, + "validate": false + }, + { + "name": "%5BKR%7D", + "type": "text", + "label": "Title", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "%5CMnU", + "type": "boolean", + "label": "Built?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "dgh%7C", + "type": "text", + "label": "Thumbnail", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "haBT", + "type": "boolean", + "label": "Done", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "yjiJ", + "type": "select", + "label": "Process", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "Not started", + "value": "Not started" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "Building", + "value": "Building" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Built", + "value": "Built" + }, + { + "label": "Filmed", + "value": "Filmed" + }, + { + "label": "Uploaded", + "value": "Uploaded" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "ziEk", + "type": "text", + "label": "Hook", + "metadata": { + "type": "rich_text" + } + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Idea", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "L%5Bye", + "type": "boolean", + "label": "2 hour build?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "NUBr", + "type": "select", + "label": "Potential", + "metadata": { + "type": "select" + } + }, + { + "name": "RRsz", + "type": "select", + "label": "Category", + "metadata": { + "type": "multi_select" + }, + "multiple": true + }, + { + "name": "%5BKR%7D", + "type": "text", + "label": "Title", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "%5CMnU", + "type": "boolean", + "label": "Built?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "dgh%7C", + "type": "text", + "label": "Thumbnail", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "haBT", + "type": "boolean", + "label": "Done", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "yjiJ", + "type": "select", + "label": "Process", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "Not started", + "Building", + "Built", + "Filmed", + "Uploaded" + ] + } + }, + { + "name": "ziEk", + "type": "text", + "label": "Hook", + "metadata": { + "type": "rich_text" + } + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "2 hour build?", + "type": "boolean", + "label": "2 hour build?" + }, + { + "name": "Potential", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Potential" + }, + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Category" + }, + { + "name": "Title", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Title" + }, + { + "name": "Built?", + "type": "boolean", + "label": "Built?" + }, + { + "name": "Thumbnail", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Thumbnail" + }, + { + "name": "Done", + "type": "boolean", + "label": "Done" + }, + { + "name": "Process", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Process" + }, + { + "name": "Hook", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Hook" + }, + { + "name": "Idea", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Idea" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Update youtube calendar.json b/backend/data/Update youtube calendar.json new file mode 100644 index 0000000000000000000000000000000000000000..aaae524a42718da6bf68a3cecce465b196741109 --- /dev/null +++ b/backend/data/Update youtube calendar.json @@ -0,0 +1,1418 @@ +{ + "name": "Update youtube content calendar", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1697168, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Notion to do" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "notion:createAPage", + "version": 1, + "parameters": { + "__IMTCONN__": 2882389 + }, + "mapper": { + "fields": { + "NUBr": "🔥", + "yjiJ": "Not started", + "title": "{{1.Task}}" + }, + "select": "list", + "database": "3b1dfa3a89954c89a8ab3743cfe05038" + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "expect": { + "fields": { + "nested": { + "NUBr": { + "mode": "chose", + "label": "🔥" + }, + "RRsz": { + "mode": "chose" + }, + "haBT": { + "mode": "chose" + }, + "yjiJ": { + "mode": "chose", + "label": "Not started" + }, + "%5CMnU": { + "mode": "chose" + }, + "L%5Bye": { + "mode": "chose" + } + } + }, + "select": { + "label": "Select from the list" + }, + "database": { + "nested": [ + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Idea", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "L%5Bye", + "type": "boolean", + "label": "2 hour build?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "NUBr", + "type": "select", + "label": "Potential", + "options": [ + { + "label": "Probably low", + "value": "Probably low" + }, + { + "label": "Dont know", + "value": "Dont know" + }, + { + "label": "High", + "value": "High" + }, + { + "label": "🔥", + "value": "🔥" + } + ], + "metadata": { + "type": "select" + }, + "validate": false + }, + { + "name": "RRsz", + "type": "select", + "label": "Category", + "options": [ + { + "label": "Full course", + "value": "Full course" + }, + { + "label": "Relevance AI", + "value": "Relevance AI" + }, + { + "label": "Sales", + "value": "Sales" + }, + { + "label": "Make.com", + "value": "Make.com" + }, + { + "label": "Relevance AI Tutorial", + "value": "Relevance AI Tutorial" + } + ], + "metadata": { + "type": "multi_select" + }, + "multiple": true, + "validate": false + }, + { + "name": "%5BKR%7D", + "type": "text", + "label": "Title", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "%5CMnU", + "type": "boolean", + "label": "Built?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "dgh%7C", + "type": "text", + "label": "Thumbnail", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "haBT", + "type": "boolean", + "label": "Done", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "yjiJ", + "type": "select", + "label": "Process", + "grouped": true, + "options": [ + { + "label": "To-do", + "options": [ + { + "label": "Not started", + "value": "Not started" + } + ] + }, + { + "label": "In progress", + "options": [ + { + "label": "Building", + "value": "Building" + } + ] + }, + { + "label": "Complete", + "options": [ + { + "label": "Built", + "value": "Built" + }, + { + "label": "Filmed", + "value": "Filmed" + }, + { + "label": "Uploaded", + "value": "Uploaded" + } + ] + } + ], + "metadata": { + "type": "status" + } + }, + { + "name": "ziEk", + "type": "text", + "label": "Hook", + "metadata": { + "type": "rich_text" + } + } + ], + "type": "collection", + "label": "Fields" + } + ] + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "notion3" + }, + "label": "Forcefactory" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:notion2,notion3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Enter a Database ID", + "required": true, + "validate": { + "enum": [ + "map", + "list" + ] + } + }, + { + "name": "database", + "type": "text", + "label": "Database ID", + "required": true + }, + { + "name": "fields", + "spec": [ + { + "name": "title", + "type": "text", + "label": "Idea", + "metadata": { + "type": "title" + }, + "required": true + }, + { + "name": "L%5Bye", + "type": "boolean", + "label": "2 hour build?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "NUBr", + "type": "select", + "label": "Potential", + "metadata": { + "type": "select" + } + }, + { + "name": "RRsz", + "type": "select", + "label": "Category", + "metadata": { + "type": "multi_select" + }, + "multiple": true + }, + { + "name": "%5BKR%7D", + "type": "text", + "label": "Title", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "%5CMnU", + "type": "boolean", + "label": "Built?", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "dgh%7C", + "type": "text", + "label": "Thumbnail", + "metadata": { + "type": "rich_text" + } + }, + { + "name": "haBT", + "type": "boolean", + "label": "Done", + "metadata": { + "type": "checkbox" + } + }, + { + "name": "yjiJ", + "type": "select", + "label": "Process", + "metadata": { + "type": "status" + }, + "validate": { + "enum": [ + "Not started", + "Building", + "Built", + "Filmed", + "Uploaded" + ] + } + }, + { + "name": "ziEk", + "type": "text", + "label": "Hook", + "metadata": { + "type": "rich_text" + } + } + ], + "type": "collection", + "label": "Fields" + } + ], + "interface": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "Database Item ID" + }, + { + "name": "created_time", + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_time", + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Created by" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "uuid", + "label": "ID" + } + ], + "type": "collection", + "label": "Last Edited by" + }, + { + "name": "icon", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "emoji", + "type": "text", + "label": "Emoji" + } + ], + "type": "collection", + "label": "Icon" + }, + { + "name": "cover", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "external", + "spec": [ + { + "name": "url", + "type": "text", + "label": "URL" + } + ], + "type": "collection", + "label": "External" + } + ], + "type": "collection", + "label": "Cover" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "parent", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "workspace", + "type": "boolean", + "label": "Workspace" + }, + { + "name": "page_id", + "type": "text", + "label": "Page ID" + }, + { + "name": "database_id", + "type": "text", + "label": "Database ID" + } + ], + "type": "collection", + "label": "Parent" + }, + { + "name": "archived", + "type": "boolean", + "label": "Archived" + }, + { + "name": "properties", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "people", + "spec": { + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection" + }, + "type": "array", + "label": "People" + }, + { + "name": "url", + "type": "text", + "label": "URL" + }, + { + "name": "text", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Text" + }, + { + "name": "select", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Select" + }, + { + "name": "email", + "type": "text", + "label": "Email" + }, + { + "name": "phone_number", + "type": "text", + "label": "Phone Number" + }, + { + "name": "multi_select", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Multi Select" + }, + { + "name": "date", + "spec": [ + { + "name": "start", + "type": "text", + "label": "Start" + }, + { + "name": "end", + "type": "text", + "label": "End" + } + ], + "type": "collection", + "label": "Date" + }, + { + "name": "checkbox", + "type": "boolean", + "label": "Checkbox" + }, + { + "name": "number", + "type": "number", + "label": "Number" + }, + { + "name": "files", + "spec": { + "spec": [ + { + "name": "name", + "type": "text", + "label": "Name" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Files" + }, + { + "name": "title", + "spec": { + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Title" + }, + { + "name": "last_edited_time", + "time": true, + "type": "date", + "label": "Last Edited Time" + }, + { + "name": "created_time", + "time": true, + "type": "date", + "label": "Created Time" + }, + { + "name": "last_edited_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Last Edited By" + }, + { + "name": "created_by", + "spec": [ + { + "name": "object", + "type": "text", + "label": "Object" + }, + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "avatar_url", + "type": "text", + "label": "Avatar Url" + }, + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "person", + "spec": [ + { + "name": "email", + "type": "text", + "label": "Email" + } + ], + "type": "collection", + "label": "Person" + } + ], + "type": "collection", + "label": "Created By" + }, + { + "name": "formula", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "string", + "type": "text", + "label": "String" + } + ], + "type": "collection", + "label": "Formula" + }, + { + "name": "relation", + "spec": { + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Relation" + }, + { + "name": "label", + "type": "text", + "label": "Label" + } + ], + "type": "collection" + }, + "type": "array", + "label": "Properties" + }, + { + "name": "properties_value", + "spec": [ + { + "name": "2 hour build?", + "type": "boolean", + "label": "2 hour build?" + }, + { + "name": "Potential", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Potential" + }, + { + "name": "Category", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "array", + "label": "Category" + }, + { + "name": "Title", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Title" + }, + { + "name": "Built?", + "type": "boolean", + "label": "Built?" + }, + { + "name": "Thumbnail", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Thumbnail" + }, + { + "name": "Done", + "type": "boolean", + "label": "Done" + }, + { + "name": "Process", + "spec": [ + { + "name": "id", + "type": "text", + "label": "ID" + }, + { + "name": "name", + "type": "text", + "label": "Name" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Process" + }, + { + "name": "Hook", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Hook" + }, + { + "name": "Idea", + "spec": [ + { + "name": "type", + "type": "text", + "label": "Type" + }, + { + "name": "text", + "spec": [ + { + "name": "content", + "type": "text", + "label": "Content" + }, + { + "name": "link", + "type": "text", + "label": "Link" + } + ], + "type": "collection", + "label": "Text" + }, + { + "name": "annotations", + "spec": [ + { + "name": "bold", + "type": "boolean", + "label": "Bold" + }, + { + "name": "italic", + "type": "boolean", + "label": "Italic" + }, + { + "name": "strikethrough", + "type": "boolean", + "label": "Strikethrough" + }, + { + "name": "underline", + "type": "boolean", + "label": "Underline" + }, + { + "name": "code", + "type": "boolean", + "label": "Code" + }, + { + "name": "color", + "type": "text", + "label": "Color" + } + ], + "type": "collection", + "label": "Annotations" + }, + { + "name": "plain_text", + "type": "text", + "label": "Plain Text" + }, + { + "name": "href", + "type": "text", + "label": "Href" + } + ], + "type": "array", + "label": "Idea" + } + ], + "type": "collection", + "label": "Properties Value" + } + ] + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Write Linkedin posts from ideas (make sure to add in your own finetuned models) (1).json b/backend/data/Write Linkedin posts from ideas (make sure to add in your own finetuned models) (1).json new file mode 100644 index 0000000000000000000000000000000000000000..66fb4c94815a1d50a3ba9b1332ac25611a8d77f9 --- /dev/null +++ b/backend/data/Write Linkedin posts from ideas (make sure to add in your own finetuned models) (1).json @@ -0,0 +1,1542 @@ +{ + "name": "Finetune writer ideas (Public version)", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1854639, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -242, + "y": -20 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Finetuned" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 74, + "y": 205 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 4, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 399, + "y": 6 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 5, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 666, + "y": 260 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 9, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 948, + "y": -31 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "json:CreateJSON", + "version": 1, + "parameters": { + "type": 180294, + "space": "" + }, + "mapper": { + "1": "{{2.result}}", + "2": "{{4.result}}", + "3": "{{5.result}}", + "4": "{{9.result}}" + }, + "metadata": { + "designer": { + "x": 1293, + "y": 221 + }, + "restore": { + "parameters": { + "type": { + "label": "My data structure" + }, + "space": { + "label": "Empty" + } + } + }, + "parameters": [ + { + "name": "type", + "type": "udt", + "label": "Data structure", + "required": true + }, + { + "name": "space", + "type": "select", + "label": "Indentation", + "validate": { + "enum": [ + "tab", + "2", + "4" + ] + } + } + ], + "expect": [ + { + "name": "1", + "type": "text", + "label": null + }, + { + "name": "2", + "type": "text", + "label": null + }, + { + "name": "3", + "type": "text", + "label": null + }, + { + "name": "4", + "type": "text", + "label": null + } + ] + } + }, + { + "id": 6, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.json}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1601, + "y": 2 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Write Linkedin posts from ideas (make sure to add in your own finetuned models).json b/backend/data/Write Linkedin posts from ideas (make sure to add in your own finetuned models).json new file mode 100644 index 0000000000000000000000000000000000000000..66fb4c94815a1d50a3ba9b1332ac25611a8d77f9 --- /dev/null +++ b/backend/data/Write Linkedin posts from ideas (make sure to add in your own finetuned models).json @@ -0,0 +1,1542 @@ +{ + "name": "Finetune writer ideas (Public version)", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1854639, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -242, + "y": -20 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "Finetuned" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 74, + "y": 205 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 4, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 399, + "y": 6 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 5, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 666, + "y": 260 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 9, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "ADD YOUR OWN FINETUNED MODEL", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on the idea that is mentioned below. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will improve the copy to make it more value driven, you will expand on the idea and use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice, see examples, are thruthful and follow & Expand on the idea below. \n\n# Instructions\n\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- You will ALWAYS end with the following CTA:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**input**:\n\nWrite a post on: in the era of AI, english is the new programming language, end with a CTA to my free prompting guide by commenting “prompting”.\n\n**output**:\n\nIn the era of AI, English is the new programming language.\n\nThe better you communicate with AI, the more you can automate.\n\nThe more you automate, the more you can scale.\n\nThe more you scale, the more you win.\n\nTo help you win, I’ve created a free 30+ Page structured prompting guide to help you master the art of prompting.\n\nIt covers:\n\n→ conversational vs structured prompting\n\n→ My 3 types of prompting frameworks\n\n→ How to create effective prompts\n\n→ Prompting Use Cases\n\n→ AI Agent Prompting\n\n→ How to use my AI tool to refine your prompts\n\nThe guide also includes a full 50-minute video tutorial.\n\nTo get access, simply:\n\nClick my name + follow + bell 🔔\n\nComment “Prompting” on this post\n\nI’ll send you the link\n\n______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**input:** \n\nSimple tip for founders on how to implement AI, start mapping out your process and start simple. \n\n**Output:**\n\nMany founders are excited about AI but don’t know where to start.\n\nHere’s a simple tip: Before diving into AI, map out your processes.\n\nWhy, you ask?\n\nBecause you can’t automate what you don’t understand.\n\nMapping helps you see what you’re doing, where AI can help, and what to prioritize.\n\nIt also helps you build a roadmap for your AI journey.\n\nBut mapping processes can be daunting, especially for complex businesses.\n\nDon’t overthink it. I use figma (FigJam).\n\nGet cracking.\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 3:\n\n**input**: \n\nWrite a post on how I grew my youtube to 10k subscribers in 4 months and lessons learned, add the following points:\n\n- Just start, dont overthink\n- Make a commitment\n- Start with info you know\n- focus on providing value and being authentic\n- stay consistent\n- start with platform specific tuturials to get your initial audience.\n\n**output**:\n\nI grew my YouTube to 10,000 subscribers in 4 months. Here’s how:\n\nYouTube is the ultimate Go-to-Market hack. It now generates us 15-30 inbound leads a week.\n\nBut getting started is tough. Here’s what worked for me:\n\n👉 Don’t overthink it\n\n- The biggest barrier is worrying too much. Most people never start. Just dive in.\n\n👉 Make a commitment\n\n- Stick with it for 6 months and don’t look back. YouTube takes time; it’s a momentum game. The beginning is the hardest.\n\n👉 Start lean\n\n- Write down 5 things you know and start filming. Don’t overoptimize. Your first 5 videos are to get comfortable on camera and learn the process.\n\n👉 Prioritize value and authenticity\n\n- Focus on the message instead of fancy production. Be authentic and real.\n\n👉 Stay consistent\n\n- Stick to a sustainable posting frequency. I recommend once a week – it’s a lot already.\n\n👉 Start with Platform-specific Tutorials\n\n- Without an initial audience, tutorials about popular platforms/software can help you get discovered.\n\n👉 Stay Authentic\n\n- Don’t create content you think people want. Create content you think is valuable. Don’t only optimize for views, optimize for quality views. Stay authentic.\n\n_______\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# The idea to write a Linkedin post on today:\n{{1.idea}}" + } + ] + }, + "metadata": { + "designer": { + "x": 948, + "y": -31 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "json:CreateJSON", + "version": 1, + "parameters": { + "type": 180294, + "space": "" + }, + "mapper": { + "1": "{{2.result}}", + "2": "{{4.result}}", + "3": "{{5.result}}", + "4": "{{9.result}}" + }, + "metadata": { + "designer": { + "x": 1293, + "y": 221 + }, + "restore": { + "parameters": { + "type": { + "label": "My data structure" + }, + "space": { + "label": "Empty" + } + } + }, + "parameters": [ + { + "name": "type", + "type": "udt", + "label": "Data structure", + "required": true + }, + { + "name": "space", + "type": "select", + "label": "Indentation", + "validate": { + "enum": [ + "tab", + "2", + "4" + ] + } + } + ], + "expect": [ + { + "name": "1", + "type": "text", + "label": null + }, + { + "name": "2", + "type": "text", + "label": null + }, + { + "name": "3", + "type": "text", + "label": null + }, + { + "name": "4", + "type": "text", + "label": null + } + ] + } + }, + { + "id": 6, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.json}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1601, + "y": 2 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Write Linkedin posts from youtube video + transcribe (make sure to add in your own finetuned models) (1).json b/backend/data/Write Linkedin posts from youtube video + transcribe (make sure to add in your own finetuned models) (1).json new file mode 100644 index 0000000000000000000000000000000000000000..0ebb53e099d0b941aeec29d97bee5582b06834d3 --- /dev/null +++ b/backend/data/Write Linkedin posts from youtube video + transcribe (make sure to add in your own finetuned models) (1).json @@ -0,0 +1,1611 @@ +{ + "name": "Finetune (Youtube) - Public Version", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1854641, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -154, + "y": -1 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "YOutube repurposing" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 9, + "module": "dumplingai:getYoutubeTranscript", + "version": 1, + "parameters": { + "__IMTCONN__": 3389613 + }, + "mapper": { + "videoUrl": "{{1.link}}", + "includeTimestamps": false, + "preferredLanguage": "en", + "timestampsToCombine": "5" + }, + "metadata": { + "designer": { + "x": 127, + "y": 181 + }, + "restore": { + "expect": { + "includeTimestamps": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "dumplingai" + }, + "label": "My Dumpling AI connection (Make.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:dumplingai", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "videoUrl", + "type": "text", + "label": "YouTube Video URL", + "required": true + }, + { + "name": "includeTimestamps", + "type": "boolean", + "label": "Include timestamps", + "required": true + }, + { + "name": "timestampsToCombine", + "type": "number", + "label": "Timestamps to combine", + "required": true + }, + { + "name": "preferredLanguage", + "type": "text", + "label": "Preferred Language" + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 380, + "y": -27 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 10, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 648, + "y": 218 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 13, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 901, + "y": -56 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 14, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 1083, + "y": 126 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "json:CreateJSON", + "version": 1, + "parameters": { + "type": 180294, + "space": "" + }, + "mapper": { + "1": "{{2.result}}", + "2": "{{10.result}}", + "3": "{{13.result}}", + "4": "{{14.result}}" + }, + "metadata": { + "designer": { + "x": 1312, + "y": 285 + }, + "restore": { + "parameters": { + "type": { + "label": "My data structure" + }, + "space": { + "label": "Empty" + } + } + }, + "parameters": [ + { + "name": "type", + "type": "udt", + "label": "Data structure", + "required": true + }, + { + "name": "space", + "type": "select", + "label": "Indentation", + "validate": { + "enum": [ + "tab", + "2", + "4" + ] + } + } + ], + "expect": [ + { + "name": "1", + "type": "text", + "label": null + }, + { + "name": "2", + "type": "text", + "label": null + }, + { + "name": "3", + "type": "text", + "label": null + }, + { + "name": "4", + "type": "text", + "label": null + } + ] + } + }, + { + "id": 6, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.json}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1470, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Write Linkedin posts from youtube video + transcribe (make sure to add in your own finetuned models).json b/backend/data/Write Linkedin posts from youtube video + transcribe (make sure to add in your own finetuned models).json new file mode 100644 index 0000000000000000000000000000000000000000..0ebb53e099d0b941aeec29d97bee5582b06834d3 --- /dev/null +++ b/backend/data/Write Linkedin posts from youtube video + transcribe (make sure to add in your own finetuned models).json @@ -0,0 +1,1611 @@ +{ + "name": "Finetune (Youtube) - Public Version", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1854641, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": -154, + "y": -1 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "YOutube repurposing" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 9, + "module": "dumplingai:getYoutubeTranscript", + "version": 1, + "parameters": { + "__IMTCONN__": 3389613 + }, + "mapper": { + "videoUrl": "{{1.link}}", + "includeTimestamps": false, + "preferredLanguage": "en", + "timestampsToCombine": "5" + }, + "metadata": { + "designer": { + "x": 127, + "y": 181 + }, + "restore": { + "expect": { + "includeTimestamps": { + "mode": "chose" + } + }, + "parameters": { + "__IMTCONN__": { + "data": { + "scoped": "true", + "connection": "dumplingai" + }, + "label": "My Dumpling AI connection (Make.com)" + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:dumplingai", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "videoUrl", + "type": "text", + "label": "YouTube Video URL", + "required": true + }, + { + "name": "includeTimestamps", + "type": "boolean", + "label": "Include timestamps", + "required": true + }, + { + "name": "timestampsToCombine", + "type": "number", + "label": "Timestamps to combine", + "required": true + }, + { + "name": "preferredLanguage", + "type": "text", + "label": "Preferred Language" + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 380, + "y": -27 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 10, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 648, + "y": 218 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 13, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 901, + "y": -56 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 14, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "(make sure to add in your own finetuned models)", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts based on Youtube videos." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my youtube video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI solution I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI solution I show in my youtube video. \n\n# Instructions\n\n- You will always end with a CTA to the full tutorial to my youtube video link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the youtube link) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output 1:**\n\nSend hyper-personalized videos via cold email using a simple [make.com](http://make.com/) automation.\n\n🎥 In Each video I:\n• Mention the lead's name\n• Scroll through their website\n• Mention a relevant company observation\n\n🔧 The best part: No obvious AI avatars. It's actually me talking!\n\n✅ All Completely automated, no human intervention.\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n## Example 3:\n\n**output**:\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nGet the full [make.com](http://make.com) template here: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n📹 Check my full tutorial on YouTube: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\n# The Transcript for today’s post:\n{{9.transcript}}\n\n# The youtube link (for the CTA):\n{{1.link}}" + } + ] + }, + "metadata": { + "designer": { + "x": 1083, + "y": 126 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "json:CreateJSON", + "version": 1, + "parameters": { + "type": 180294, + "space": "" + }, + "mapper": { + "1": "{{2.result}}", + "2": "{{10.result}}", + "3": "{{13.result}}", + "4": "{{14.result}}" + }, + "metadata": { + "designer": { + "x": 1312, + "y": 285 + }, + "restore": { + "parameters": { + "type": { + "label": "My data structure" + }, + "space": { + "label": "Empty" + } + } + }, + "parameters": [ + { + "name": "type", + "type": "udt", + "label": "Data structure", + "required": true + }, + { + "name": "space", + "type": "select", + "label": "Indentation", + "validate": { + "enum": [ + "tab", + "2", + "4" + ] + } + } + ], + "expect": [ + { + "name": "1", + "type": "text", + "label": null + }, + { + "name": "2", + "type": "text", + "label": null + }, + { + "name": "3", + "type": "text", + "label": null + }, + { + "name": "4", + "type": "text", + "label": null + } + ] + } + }, + { + "id": 6, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.json}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1470, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Write Linkedin posts on video transcripts (make sure to add in your own finetuned models) (1).json b/backend/data/Write Linkedin posts on video transcripts (make sure to add in your own finetuned models) (1).json new file mode 100644 index 0000000000000000000000000000000000000000..8fe2e033b312ab14a7cae6b24399d6a5453c6bd0 --- /dev/null +++ b/backend/data/Write Linkedin posts on video transcripts (make sure to add in your own finetuned models) (1).json @@ -0,0 +1,1542 @@ +{ + "name": "Finetune (Video) - Public Version", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1854644, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "video" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 11, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 545, + "y": -165 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 12, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 719, + "y": 28 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 13, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 912, + "y": -203 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "json:CreateJSON", + "version": 1, + "parameters": { + "type": 180294, + "space": "" + }, + "mapper": { + "1": "{{2.result}}", + "2": "{{11.result}}", + "3": "{{12.result}}", + "4": "{{13.result}}" + }, + "metadata": { + "designer": { + "x": 1166, + "y": -13 + }, + "restore": { + "parameters": { + "type": { + "label": "My data structure" + }, + "space": { + "label": "Empty" + } + } + }, + "parameters": [ + { + "name": "type", + "type": "udt", + "label": "Data structure", + "required": true + }, + { + "name": "space", + "type": "select", + "label": "Indentation", + "validate": { + "enum": [ + "tab", + "2", + "4" + ] + } + } + ], + "expect": [ + { + "name": "1", + "type": "text", + "label": null + }, + { + "name": "2", + "type": "text", + "label": null + }, + { + "name": "3", + "type": "text", + "label": null + }, + { + "name": "4", + "type": "text", + "label": null + } + ] + } + }, + { + "id": 6, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.json}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1470, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/Write Linkedin posts on video transcripts (make sure to add in your own finetuned models).json b/backend/data/Write Linkedin posts on video transcripts (make sure to add in your own finetuned models).json new file mode 100644 index 0000000000000000000000000000000000000000..8fe2e033b312ab14a7cae6b24399d6a5453c6bd0 --- /dev/null +++ b/backend/data/Write Linkedin posts on video transcripts (make sure to add in your own finetuned models).json @@ -0,0 +1,1542 @@ +{ + "name": "Finetune (Video) - Public Version", + "flow": [ + { + "id": 1, + "module": "gateway:CustomWebHook", + "version": 1, + "parameters": { + "hook": 1854644, + "maxResults": 1 + }, + "mapper": {}, + "metadata": { + "designer": { + "x": 0, + "y": 0 + }, + "restore": { + "parameters": { + "hook": { + "data": { + "editable": "true" + }, + "label": "video" + } + } + }, + "parameters": [ + { + "name": "hook", + "type": "hook:gateway-webhook", + "label": "Webhook", + "required": true + }, + { + "name": "maxResults", + "type": "number", + "label": "Maximum number of results" + } + ] + } + }, + { + "id": 2, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 300, + "y": 0 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 11, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 545, + "y": -165 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 12, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 719, + "y": 28 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 13, + "module": "openai-gpt-3:CreateCompletion", + "version": 1, + "parameters": { + "__IMTCONN__": 2882820 + }, + "mapper": { + "select": "chat", + "max_tokens": "0", + "temperature": "0.7", + "top_p": "1", + "n_completions": "1", + "response_format": "text", + "model": "make sure to add in your own finetuned model", + "messages": [ + { + "role": "system", + "content": "You are a world-class Linkedin post writer for Ben van Sprundel, an AI creator. You have a particular knack for writing value driven, short sentenced and engaging linkedin posts." + }, + { + "role": "user", + "content": "# Objective\n\nYour goal as my world class Linkedin post writer is to write an engaging linkedin post based on my tone of voice and based on my video transcript. The posts should be optimized to provide value to businesses and should focus on showing use cases and value for business owners looking to implement AI. You will read the transcript and make a value driven linkedin post based on the AI concept I show in the video, you will write in a way that provides value to businesses and should focus on showing use cases and value for business owners, you will also use my particular tone of voice. You will focus on writing in an engaging tone for linkedin where we focus on being value giving, short & easy to read sentences and a strong hook.\n\n# Context\n\nYou will be writing these posts for Ben AI, an AI content creator that teaches people how to build AI Agents & how business can implement AI to scale profitably. It is vital to my career these posts follow my tone of voice (see examples), are thruthful and are based on the AI concept I show in my video. \n\n# Instructions\n\n- If there is a link under the “template link” section, you will end with a CTA to the free template link\n- It is vital to my career that these posts are value driven for business owners and people looking for use cases for AI inside their business.\n- It is vital to my career you follow the tone of voice of the examples below\n- It is vital to my career you use short, easy to read sentences\n- it is vital to my career you start with a strong hook.\n- use some emojis but do not go overboard.\n- All the the way at the end of the post (After the CTA to the free template link if we have one) You will ALWAYS end with the following text:\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n# Examples\n\n## example 1:\n\n**Transcript + link:**\n\n00:00:00.120 hey guys so in this video I'll show you\n00:00:01.880 how to set up a no code AI agent team\n00:00:04.480 that scrapes any website or social media\n00:00:06.879 in seconds all by just telling it what\n00:00:09.040 to do through a quick message on slack\n00:00:11.160 this agent team can for example be used\n00:00:13.040 to find and scrape New Leads do\n00:00:15.080 competitor analysis research potential\n00:00:17.400 prospects but the possibilities with\n00:00:19.119 this setup are really endless and in\n00:00:20.960 this video I'll show you how you let\n00:00:22.199 your agents SCP any website do Vision\n00:00:24.320 based scraping and scrape all social\n00:00:26.400 media and posts which can be a bit\n00:00:28.119 trickier to do I'll show you all of the\n00:00:30.039 this by giving you a demo and a detailed\n00:00:31.720 breakdown of a competitor analysis agent\n00:00:33.760 that I recently delivered to a client\n00:00:35.760 but this is just one use case this setup\n00:00:38.000 could be used for many other purposes\n00:00:39.600 and the template will be for free as\n00:00:41.280 always in my free community if you don't\n00:00:43.399 know me yet I'm Ben I Implement AI\n00:00:45.520 Automation and AI agents into businesses\n00:00:47.680 since 2023 I also run a community with\n00:00:50.079 over 500 AI agent Builders and if you're\n00:00:53.120 a company and you're looking to be one\n00:00:54.960 of the first companies to adopt AI into\n00:00:56.719 your business and want me and my team to\n00:00:58.440 help you out you can also book me for\n00:01:00.280 free call in the description below so\n00:01:01.960 I'll first give you a quick demo of the\n00:01:03.399 competitor analysis agent inter action\n00:01:05.239 then I'll give you an overview of the\n00:01:06.640 setup for this agent team and then I'll\n00:01:08.400 give you a detailed breakdown of how you\n00:01:09.720 can set it up yourself and also how you\n00:01:11.600 can scrape let your agent scrape all of\n00:01:13.680 these different platforms now of course\n00:01:15.560 uh this is not the actual agent I\n00:01:16.880 delivered to the client I just recreated\n00:01:18.640 it quickly for myself but it has almost\n00:01:20.880 the same functionalities so the way this\n00:01:22.720 agent is set up is basically we have it\n00:01:24.479 here inside of our slack right\n00:01:26.040 competitor analysis agent and basically\n00:01:28.280 we can instruct this agent to to uh\n00:01:30.520 research different companies um we can\n00:01:33.720 also instructed which platforms to do\n00:01:35.479 the competitor analysis on and also for\n00:01:38.000 which time frame now I want to give you\n00:01:39.880 a full breakdown of everything you can\n00:01:41.119 do so I will instruct our agent now to\n00:01:43.720 do a full um competitor analysis and\n00:01:46.479 that's how he will scrape everything\n00:01:48.600 basically so we can say something like\n00:01:51.600 hi please uh do a full\n00:01:56.920 competitor analysis on I'll take the\n00:02:00.600 same examples I always take I come from\n00:02:02.920 the CRM space that's why on Hotpot and\n00:02:05.479 pipe Drive um for the last\n00:02:10.038 month now this is going to take a while\n00:02:12.239 because it's scraping lots of data in\n00:02:13.879 the background and basically making\n00:02:15.400 reports on each of them uh so this is\n00:02:17.280 going to take a few minutes I'm just\n00:02:18.400 going to sneak in a quick call to action\n00:02:20.760 I know there's some people who have\n00:02:22.120 watched some of my earlier videos but\n00:02:23.480 haven't subscribed yet uh I understand I\n00:02:26.360 I do the same but it does really help me\n00:02:28.640 if you can subscribe and maybe like this\n00:02:30.599 video I do really appreciate it anyway\n00:02:33.360 this is going to take a while so a few\n00:02:35.239 minutes so I'm going to speed up the\n00:02:36.680 video\n00:02:40.400 now and now we got it back I sent it\n00:02:43.519 back into another Channel I should have\n00:02:45.319 sent it here but uh yes we got it back\n00:02:48.519 so here here are the comprehensive\n00:02:50.480 research reports for HubSpot and pipe\n00:02:52.120 drive right so basically we get multiple\n00:02:54.480 documents here um for all the platforms\n00:02:57.599 it has done an analysis on right so\n00:03:00.480 we have news report we have review\n00:03:02.560 analysis right so review platforms uh we\n00:03:05.879 have uh a report on our blogs on\n00:03:09.879 branding on LinkedIn X YouTube right uh\n00:03:14.440 now you can add more if you want this\n00:03:16.239 company Wanted only LinkedIn and X but\n00:03:18.760 I'll also show you if you want how to do\n00:03:20.599 this on other social media platforms so\n00:03:22.959 you can see the research reports here so\n00:03:26.040 I'll open them up quickly so you get an\n00:03:27.760 idea\n00:03:32.400 so here we have the news right so we it\n00:03:34.760 just checks if there's any interesting\n00:03:37.360 you know uh mentions of hopspot and pipe\n00:03:39.439 Drive in the news over the last month\n00:03:41.000 right has launched Breeze a\n00:03:42.400 comprehensive AI Power Platform at the\n00:03:44.319 inbound 2024 conference right so just\n00:03:47.920 some important information a company\n00:03:50.200 might need to know about how hopspot or\n00:03:52.879 pipe Drive was in the news right pipe\n00:03:55.239 Drive analys the beta launch of pipe\n00:03:56.680 Drive polls right Etc so it just sort of\n00:04:00.159 find some interesting uh things that\n00:04:02.120 that might be useful to know about\n00:04:03.799 competitors then we have reviews which\n00:04:06.239 are uh basically it looks at these\n00:04:08.519 review platforms and identifies any sort\n00:04:10.720 of opportunities for our company meaning\n00:04:13.920 any uh sort of bad reviews or or good\n00:04:16.959 reviews to see and how a competitor how\n00:04:19.759 you can basically position your your\n00:04:21.238 brand a little bit better so you can see\n00:04:23.199 overall weight rating we get right 2.9\n00:04:25.560 out of five common issues customers\n00:04:27.840 frequently complain about poor customer\n00:04:29.400 support report right uh significant\n00:04:32.400 concerns about the cost of the platform\n00:04:34.919 right users have issues with account\n00:04:36.280 management including on out authorized\n00:04:38.479 reactivation right positive highlights\n00:04:41.240 it's comprehensive CRM and marketing\n00:04:43.400 tools and the same for pipe drive right\n00:04:46.160 and then it even extracts one negative\n00:04:48.440 and one positive review if you want to\n00:04:49.960 get a better idea absolutely terrible\n00:04:51.720 company to deal with this system is\n00:04:53.479 complicated and purely built to take\n00:04:54.919 your money with underhand tactics uh\n00:04:57.639 positive review right we use hopspot\n00:04:59.720 every day right and the same for pipe\n00:05:02.759 drive and then it even generates some\n00:05:05.120 opportunities right so for your own\n00:05:07.320 brand meaning given the ne negative\n00:05:09.039 feedback and customer support we should\n00:05:10.960 emphasize our commitment to providing\n00:05:13.280 responsive knowledgeable and\n00:05:14.680 personalized customer service right\n00:05:16.880 pricing transparency which should not\n00:05:18.840 noticed is some of the bad reviews\n00:05:21.199 account management user experience so\n00:05:24.360 you can see you get a nice uh little\n00:05:26.039 overview very quickly of you know how uh\n00:05:29.319 sort of the review uh status of these\n00:05:32.160 competitors then we have the blog right\n00:05:34.759 so summary right we can see for hopspot\n00:05:37.240 what are the current teams and the\n00:05:38.720 content right of s recent blog post\n00:05:40.840 focus on digital marketing strategies AI\n00:05:42.759 integration in marketing customer\n00:05:44.199 Journey mapping SEO optimization\n00:05:46.960 examples right it gives you some\n00:05:49.039 examples and the same for pipe drive and\n00:05:51.280 then again it gives you some\n00:05:53.240 opportunities based on uh their content\n00:05:55.600 and what's working well and what's not\n00:05:58.160 uh so content gaps right some things\n00:06:00.680 they they are not covering thematic uh\n00:06:04.120 opportunities uh Etc and then we have\n00:06:07.599 branding now this is actually visually\n00:06:09.560 visual based scraping uh I actually\n00:06:11.720 forgot one thing here normally you also\n00:06:13.280 have a screenshot of their homepage but\n00:06:14.880 with the visual with this branding\n00:06:16.160 research reports we basically uh do\n00:06:18.639 visual scraping to get an idea of their\n00:06:21.120 overall branding and visual identity\n00:06:23.440 right so the homepage utilizes a soft\n00:06:25.680 color palette featuring Peach and blue\n00:06:27.360 elements enhancing a friendly and\n00:06:28.800 approachable tone ET TR the copy right\n00:06:30.919 it analyzes the copy and the visual\n00:06:33.919 elements uh I put this in just to show\n00:06:36.479 you how uh visual scraping works too\n00:06:38.800 because it can be quite powerful\n00:06:40.039 especially with these sort of image or\n00:06:42.639 brand uh things you you can't really do\n00:06:45.120 with text Bas scraping uh so visual\n00:06:48.240 scraping can be very powerful uh for\n00:06:50.080 certain use cases too uh so we can see\n00:06:52.680 here also we get opportunities then we\n00:06:54.960 have LinkedIn right LinkedIn research uh\n00:06:57.639 research report the summaries of each\n00:06:59.960 company again we give common themes and\n00:07:01.639 topics right frequently focus on\n00:07:03.759 seasonal themes company events and\n00:07:05.240 motivational content they often\n00:07:07.240 Incorporated casual and engaging tone\n00:07:08.800 making their post relatable and sharable\n00:07:11.000 right and then we can see engagement\n00:07:12.280 metrics right the average engagement\n00:07:14.240 metrics are you know 1,100 likes 44\n00:07:17.319 comments post frequency and timing every\n00:07:20.440 two days right uses commment hashtags\n00:07:24.440 right same for pipe drive and then we\n00:07:26.840 even have the top performing Post in\n00:07:28.800 that time frame\n00:07:30.080 right falls about all about pumpkin\n00:07:32.280 spice lattes Gilmore Girls returns and\n00:07:34.400 counting down to Q4 right got 1,100\n00:07:37.120 likes and we can also check out the link\n00:07:38.680 if we want to\n00:07:41.759 here and uh we get another one here\n00:07:46.080 right we get the top post basically and\n00:07:47.680 the same for pipe\n00:07:49.199 drive right and then again opportunities\n00:07:52.520 right same same same idea as before and\n00:07:55.840 then we have the X very similar right\n00:07:57.919 common themes and topics see Tas they're\n00:08:00.440 using a lot get your tickets here watch\n00:08:02.120 the live stream right average likes 12\n00:08:05.400 post frequency in time right same for\n00:08:07.879 bip drive and again we get the top\n00:08:09.520 performing\n00:08:11.520 tweets right here which we can also\n00:08:13.840 check out if we want to uh Etc and again\n00:08:17.240 opportunities you get the idea right and\n00:08:19.479 lastly we have the same for YouTube\n00:08:20.840 Right summary of each Channel General\n00:08:22.440 Channel engagement metrix Etc it's just\n00:08:25.000 a quick uh idea but you can see the\n00:08:26.800 power of this uh and you can see also\n00:08:28.680 why it took so long because it actually\n00:08:30.199 took uh what was it yeah 15 minutes our\n00:08:33.080 agent was working for 15 minutes because\n00:08:34.839 you can imagine the amount of data it's\n00:08:36.240 scraping in the background and analyzing\n00:08:38.519 the data and then creating these uh\n00:08:40.760 competitor analysis reports but you can\n00:08:43.120 see the power of this like if if a human\n00:08:45.000 would do this and there are many\n00:08:46.440 marketing people who do this uh they\n00:08:48.800 would save a lot of time and that's why\n00:08:50.560 the company was very impressed and happy\n00:08:52.279 with this solution but I want to give\n00:08:54.440 you a quick breakdown first of the agent\n00:08:56.920 setup because there are I think many\n00:08:58.640 other use cases for for this and then\n00:08:59.880 I'll give you a detailed breakdown of uh\n00:09:02.079 the agent inside of relevance Ai and the\n00:09:04.720 scrapers now I've set this system up\n00:09:06.720 inside of relevance Ai and [make.com](http://make.com/) if\n00:09:08.640 you're new to relevance AI it's a no\n00:09:10.519 code AI agent and AI agent team Builder\n00:09:13.120 now this setup is a little bit more\n00:09:14.600 complex if you're completely new to\n00:09:15.880 relevance AI I do have many other\n00:09:17.399 tutorials on relevance a on my YouTube\n00:09:19.120 channel which might be a bit simpler I\n00:09:20.839 tried to keep it straightforward in this\n00:09:22.079 one too but if uh this goes over your\n00:09:24.240 head I do have a full beginners tutorial\n00:09:26.200 too on relevance AI which I'll link up\n00:09:27.959 here and then I'll use [make.com](http://make.com/)\n00:09:30.240 uh to scrape some of the platforms we\n00:09:31.880 can't scrape inside of relevance a then\n00:09:33.839 we give our agent inside of relevance a\n00:09:36.079 access to those [make.com](http://make.com/) automations to\n00:09:39.279 get access to that uh scrape data from\n00:09:41.560 other platforms now both platforms you\n00:09:43.440 can start out completely for free um\n00:09:45.880 they are completely no codes some people\n00:09:47.480 have some doubts about the relevance\n00:09:48.519 sayi pricing because I think the first\n00:09:50.320 plan is $200 but don't get fooled by\n00:09:52.560 that you can actually start out with a\n00:09:53.880 free plan and you only pay $2 for every\n00:09:56.880 thousand credits you use so you can you\n00:09:59.399 use this quite cheaply and play around\n00:10:01.040 with it quite cheaply I can tell you you\n00:10:02.440 can do quite a lot with a th000 credits\n00:10:04.279 so both of these platforms very cheap\n00:10:06.240 and easy to start out I'll make sure to\n00:10:07.800 link them in the description below too\n00:10:09.920 so the way this agent is set up is in\n00:10:12.160 the following way so here we have the\n00:10:14.680 trigger for our agent here we have our\n00:10:17.040 competitor competitor analysis manager\n00:10:19.320 agent and his tool and here we have his\n00:10:22.000 sub agents and their tools so the way\n00:10:24.680 this works in practice is of course I\n00:10:27.200 trigger it through a slack message which\n00:10:28.800 I just showed in my demo that message\n00:10:30.480 will be sent to my manager agent who\n00:10:32.480 basically has two responsibilities as\n00:10:34.240 always delegating to the sub agents the\n00:10:36.760 task to the sub agents who actually do\n00:10:38.360 the work and second communicating back\n00:10:40.839 to me right that's why we've equipped\n00:10:42.519 him with one tool which is the send\n00:10:44.160 slack message tool which I set up\n00:10:46.360 wrongly as you saw I I send it back\n00:10:48.399 wrong to the to the wrong uh slack\n00:10:50.440 Channel but why don't we let our manager\n00:10:53.440 agent do all of these tasks because in\n00:10:55.600 general we want to limit the amount of\n00:10:57.600 responsibilities for competitor for our\n00:10:59.760 manager agent as much as possible\n00:11:01.920 because L&M in general are not good at\n00:11:03.839 doing multiple tasks and this manager\n00:11:06.040 agent already has to break down my query\n00:11:08.000 and communicate back to me so basically\n00:11:10.279 we're trying to limit the amount of\n00:11:12.040 responsibilities as much as possible by\n00:11:14.000 offloading all the other work to sub\n00:11:15.800 agents and tools and that's really how\n00:11:17.920 we want to think about these systems to\n00:11:19.399 make them as reliable as possible so if\n00:11:22.200 if the query comes in our competitor\n00:11:24.560 analysis manager agent will basically uh\n00:11:27.360 instruct these two sub agents what to do\n00:11:29.600 so we have two sub agents here the first\n00:11:31.079 one is the social media scraper who\n00:11:32.880 basically has all the tools available to\n00:11:34.680 him to scrape all the social media\n00:11:36.320 platforms so we have the LinkedIn\n00:11:38.120 scraper tool we have the X scraper tool\n00:11:40.040 we have the YouTube scraper tool and\n00:11:42.079 this these ones I didn't set up in this\n00:11:43.639 specific setup but you could also uh\n00:11:45.480 give a scrape Instagram uh scrape\n00:11:47.440 Facebook tool and basically he write he\n00:11:50.120 do does the scraping writes the reports\n00:11:52.320 and then uh sends them back to our\n00:11:53.839 manager agent and then we have the\n00:11:55.399 second sub agent which is the general\n00:11:56.839 web scraper agent who has four tools the\n00:11:59.440 public review website scraper uh the\n00:12:01.959 blog scraper news scraper and a vision\n00:12:04.440 based scraper right which I uh showed in\n00:12:06.639 the example of The Branding competitor\n00:12:08.760 analysis report and again right he sends\n00:12:11.040 it back to the manager agent who then\n00:12:12.399 sends me back all the reports through\n00:12:14.160 slack that's the way this system is set\n00:12:15.920 up now this is just one use case right\n00:12:18.040 of this setup but I think there are many\n00:12:19.600 other very interesting use cases I just\n00:12:21.959 wrote down a few that I came up with\n00:12:23.959 very quickly the first one that I think\n00:12:25.800 is very powerful is use this system for\n00:12:27.680 lead scraping right you can imagine a\n00:12:30.000 setup like this where you scrape leads\n00:12:31.880 from websites from directories but maybe\n00:12:34.639 even more interesting is scraping leads\n00:12:37.519 from social media because for example\n00:12:39.399 and I'm going to show you how to do this\n00:12:40.680 later too you can scrape leads from\n00:12:43.560 people who engaged or interacted with\n00:12:46.240 certain types of post on different uh\n00:12:48.880 social media channels so for example\n00:12:51.000 someone who liked or commented on a post\n00:12:53.880 about sales or about uh on a post of a\n00:12:56.839 competitor we can uh scrape those leads\n00:13:00.279 and you can even imagine a scenario\n00:13:01.959 where we actually personalize Outreach\n00:13:03.880 emails or DMS based on the engagement\n00:13:06.560 we've seen these lead have with a\n00:13:08.440 specific post uh but that's just one\n00:13:10.839 example many use cases for the for the\n00:13:13.240 lead scraping with this setup they could\n00:13:15.079 also Imagine finding influencers right\n00:13:17.320 so companies that try to find\n00:13:18.920 influencers that talk uh about specific\n00:13:22.079 Topics in a specific space so we can let\n00:13:24.360 for example this agent run every day\n00:13:26.519 identify the top posts in H certain\n00:13:29.519 topic uh the top influencers on those\n00:13:32.199 specific topics and again we can then\n00:13:35.560 immediately start the agent could\n00:13:37.320 immediately start uh personalizing\n00:13:39.320 Outreach to those influencers to try to\n00:13:42.079 you know get them on board Etc we can\n00:13:44.160 think of content idea generation through\n00:13:46.320 this system of course too right um just\n00:13:48.720 giving reports back on on uh competitors\n00:13:53.079 what works for them uh people in the\n00:13:55.240 space that have uh you know well\n00:13:57.920 performing posts right we can we can\n00:13:59.839 think of many many scenarios of course\n00:14:01.560 Outreach personalization as I said\n00:14:03.320 before and researching Pro potential\n00:14:06.000 prospects but again many more use cases\n00:14:08.560 here uh I think very interesting setup\n00:14:10.959 and lots of possibilities anyway now let\n00:14:13.199 me show you in detail how I set this up\n00:14:15.440 inside of relevance Ai and\n00:14:17.800 [make.com](http://make.com/) so here we are in my relevance\n00:14:19.880 AI dashboard uh remember I put the full\n00:14:22.519 template of this agent team inside of my\n00:14:24.920 free community too right so if you want\n00:14:26.680 to check it out more detail you have it\n00:14:28.120 there but even if you're going to close\n00:14:29.240 it you do have to uh change some things\n00:14:31.399 for yourself so make sure to stick with\n00:14:33.079 me so I'll go over agent by agent so\n00:14:35.759 first I'll start with the uh competitor\n00:14:38.079 analysis manager agent and then I'll go\n00:14:40.120 over the sub agent and their tools and\n00:14:42.399 uh through that process I'll show you\n00:14:43.519 basically how you can scrape anything so\n00:14:46.240 let's start with the uh manager agent so\n00:14:49.279 you can see here we have the request\n00:14:50.920 that I put in uh on on slack right and\n00:14:53.160 we can basically see here what happened\n00:14:54.440 in the background so you can see here in\n00:14:56.600 the background here we got the trigger\n00:14:58.440 right please do a for competitor\n00:14:59.639 analysis on hopspot and pipe drive and\n00:15:01.560 you can see in the background our agent\n00:15:03.160 did the following things so first it got\n00:15:04.800 the current date now basically does that\n00:15:08.519 to uh sort of identify when is it\n00:15:11.120 actually the last month now if you want\n00:15:12.800 to know what this tool does it's\n00:15:14.040 basically just a very uh quick python\n00:15:16.440 script on getting the getting the\n00:15:18.759 current date now that's the only piece\n00:15:20.800 of code I used so don't worry if you\n00:15:23.440 don't know how to code uh but that's all\n00:15:25.800 that tool does right so that's the first\n00:15:28.120 thing it did and then it delegated it uh\n00:15:30.440 to the general scraper agent and here we\n00:15:32.639 can actually see what it told the sub\n00:15:35.480 his sub agent what to do right so you\n00:15:37.079 can see here please perform a full\n00:15:38.880 research analysis on hopspot and pip\n00:15:40.680 drive for the last month include blog\n00:15:42.399 posts review website news and branding\n00:15:45.000 right so basically you can see this as a\n00:15:46.920 prompt right so our manager agent\n00:15:48.440 basically prompts our sub agent what to\n00:15:51.040 do right so and then you can see here in\n00:15:54.079 the background what our general scraper\n00:15:55.480 agent did he also used the get current\n00:15:58.000 datee okay so actually I didn't need to\n00:15:59.800 get current date in the in the manager\n00:16:01.920 agent uh because we also have that one\n00:16:04.360 in the sub agent that's a mistake on my\n00:16:06.680 part but yes you can see they both have\n00:16:08.360 it so uh then you can see he used the\n00:16:11.199 news uh uh news research scraper then\n00:16:14.240 the review analysis then the blog\n00:16:16.480 analysis and The Branding visual\n00:16:18.480 analysis which is the which is the\n00:16:20.240 visual scraper right and then basically\n00:16:22.199 he did all of that and then got wrote\n00:16:24.519 the the competitor analysis reports and\n00:16:27.800 then you can see this he said SS back to\n00:16:29.480 our manager agent here are the links to\n00:16:31.519 the comprehensive research reports for\n00:16:33.040 hopspot and pip drive right you can see\n00:16:34.800 we got all the links here and that's\n00:16:36.480 basically the message he sends back to\n00:16:38.160 our manager agent and then you can see\n00:16:39.920 in the background the next step our man\n00:16:42.560 uh manager agent took is to delegate it\n00:16:44.399 to the social media scraper agent and\n00:16:46.079 same thing right he prompts him what to\n00:16:48.040 do right please perform a full research\n00:16:50.399 analysis on hopspot and P Drive include\n00:16:52.199 LinkedIn X and YouTube right again in\n00:16:54.639 the background our social media scraper\n00:16:57.680 agent does the link analysis the X the X\n00:17:01.000 analysis and the YouTube analysis and\n00:17:02.839 sends back the reports back to the\n00:17:04.599 social media to the manager agent and\n00:17:06.959 then lastly you can see our manager\n00:17:08.640 agent use the send slack message tool to\n00:17:10.919 send all the research reports back to me\n00:17:13.359 through slack so that's how it works in\n00:17:15.880 the background now let me go over uh\n00:17:18.359 very quickly the the manager agent setup\n00:17:20.520 and then I'll go over uh the other sop\n00:17:22.959 agents and all of their tools uh step by\n00:17:25.599 step uh for the slack integration um\n00:17:30.280 relevant actually doesn't have a way to\n00:17:33.000 um trigger your agent through slack so I\n00:17:35.640 also set that one up through [make.com](http://make.com/)\n00:17:37.679 I'll show you that slack trigger if\n00:17:39.240 you're interested all the way at the end\n00:17:41.000 of this video um because first I want to\n00:17:43.720 show you these agent setups and the\n00:17:45.760 scraping setups and if you're interested\n00:17:47.480 you can check that out at the end so\n00:17:49.559 here we have the manager agent setup\n00:17:51.320 right uh here we just have the name and\n00:17:53.200 the agent description not that important\n00:17:54.679 for the manager agent and here we have\n00:17:57.039 the Integrations now again we don't have\n00:17:58.440 to Slack integration here so that's why\n00:18:00.159 I did it true make and then here we have\n00:18:01.880 the core instructions which is basically\n00:18:03.559 the system prompt or the agent prompt um\n00:18:06.280 I'm not going to go over it in detail\n00:18:07.840 because you can check it out in my free\n00:18:09.440 template and also I do have a full uh\n00:18:12.360 tutorial also on my YouTube channel\n00:18:14.039 about agent prompting and prompting in\n00:18:15.880 general in these AI agent and AI\n00:18:18.039 automation systems so if you want to\n00:18:19.919 learn more about agent prompting which\n00:18:21.320 is a bit different than normal prompting\n00:18:23.120 uh check out my uh my video I'll make\n00:18:24.679 sure to link it up here too uh so yeah\n00:18:27.080 basically we give it a roll uh the\n00:18:28.960 objective some context the SOP very\n00:18:32.159 important in these agent prompts right\n00:18:33.880 what does it have to do in which case\n00:18:35.799 right this is really the most important\n00:18:37.280 part usually in those uh agent prompts\n00:18:40.320 and uh this of course is also very\n00:18:42.440 important the tools and sub agent\n00:18:43.880 section where we basically gave it the\n00:18:45.480 manage agent more context on what tools\n00:18:48.120 it has when to use it and also which sub\n00:18:51.000 agents they have and what they can do\n00:18:53.200 and also when to use them of course and\n00:18:56.120 I also always add in how to communicate\n00:18:58.039 right so what to they actually have to\n00:19:00.120 send or instruct their sub agents to do\n00:19:02.640 when they get a query because our sub\n00:19:04.600 agents can only do the work properly if\n00:19:06.440 they get profit properly so that is an\n00:19:09.480 important part to to uh to include too\n00:19:12.320 then we have the flow Builder right flow\n00:19:13.919 Builder is basically to double down in\n00:19:15.280 that on that sop right we have in the\n00:19:17.120 prom sometimes very difficult to write\n00:19:18.760 out in language um sort of the the flow\n00:19:22.360 our manager agent or any agent has to\n00:19:24.360 follow and that's sort of what we can do\n00:19:26.120 in a in an easier way in the flow\n00:19:27.880 Builder now this case it's not an\n00:19:29.679 extremely complex sop uh but I did put\n00:19:33.080 it in also just for example purposes so\n00:19:35.520 basically this we can\n00:19:37.159 just yeah double down on that sop in\n00:19:39.679 this this flow Builders you can see for\n00:19:42.320 here we can put in either instructions\n00:19:43.840 or conditions so instructions is just\n00:19:45.480 like this you have to do and these\n00:19:47.760 conditions are like if this happens then\n00:19:49.559 do this if this happens then do that so\n00:19:51.600 you can see make make sure you have all\n00:19:53.679 necessary info a companies to research B\n00:19:56.679 platforms to research and C time frame\n00:19:58.400 to research because our manager agent\n00:20:00.799 always needs those three data points to\n00:20:03.120 actually be able to do his work right so\n00:20:05.039 that's the first instruction we give him\n00:20:06.440 make sure you have all of that\n00:20:07.600 information before you actually get to\n00:20:09.559 work right and then we have a condition\n00:20:11.640 which is if user ask for a full\n00:20:13.240 competitor analysis right then follow\n00:20:15.520 this sop which is then in that case of\n00:20:18.360 course it has to use all uh the sub\n00:20:20.520 agents to do a full competitor analysis\n00:20:23.280 uh um report right so we have used\n00:20:25.720 General scraper and use social media\n00:20:27.400 scraper you can add in those sub agents\n00:20:29.720 by putting in a slash here and then you\n00:20:31.480 can choose your sub agent and so that's\n00:20:34.600 condition one and then the condition two\n00:20:35.960 is if user asked for analysis on a\n00:20:37.880 specific platform so let's say I I only\n00:20:39.840 want a research on LinkedIn then it\n00:20:41.960 doesn't have to use the general scraper\n00:20:43.440 so in that case it follows a different\n00:20:45.320 flow use the specific research agent for\n00:20:48.120 the specific platform to research so in\n00:20:50.039 this case you would only have to use the\n00:20:51.600 social media scraper and only instructed\n00:20:53.280 to do the research on LinkedIn right so\n00:20:56.200 that's s so more important probably not\n00:20:58.080 that important this setup because it's\n00:20:59.640 quite an easy sop but when you have a\n00:21:01.640 more difficult one very works very well\n00:21:03.600 if you double down on theop in this flow\n00:21:05.520 Builder um now then we have uh these\n00:21:09.480 other are not that important then we\n00:21:10.799 have our tools here now we have the C\n00:21:12.679 get current date which is actually not\n00:21:14.080 necessary as I showed you before because\n00:21:15.600 these sub agents also have this tool um\n00:21:18.480 and then we have the send slack message\n00:21:20.279 right now very very easy I can show you\n00:21:22.200 very quickly because uh relevant SII\n00:21:24.520 basically has this slack uh send slack\n00:21:27.279 message natively integrated so it's very\n00:21:29.360 easy uh here we have the message which\n00:21:31.320 our agent fills out right so and this is\n00:21:34.840 basically description which is a prompt\n00:21:37.080 to our manager agent on how to fill out\n00:21:40.039 this message this input right so you can\n00:21:43.039 really tell it here what to do right add\n00:21:45.200 all the links of the research reports to\n00:21:46.840 the uh uh to me make sure to specify\n00:21:49.159 which specific research reports each one\n00:21:51.520 for example X report link Etc so our\n00:21:55.320 manage agent fills this message out we\n00:21:57.360 store that in a variable and then we use\n00:21:59.159 the send slack message module which is\n00:22:01.159 natively integrated into relevance AI\n00:22:03.880 right you can just search for slack send\n00:22:07.279 right send slack message and then you\n00:22:10.600 can connect it here right now I sent it\n00:22:12.760 to the wrong one right so actually had\n00:22:14.919 to put it in this one right and then we\n00:22:16.840 add in the message which in this case we\n00:22:18.520 put in the variable which our manager\n00:22:20.320 agent fills out right and then we'll\n00:22:22.039 send that that's it very easy and then\n00:22:26.159 we have uh the sub agent section of our\n00:22:28.279 matter manager agent now you can see\n00:22:30.360 where he has access to his two sub\n00:22:32.000 agents the general scraper and the\n00:22:33.520 social media scraper agent uh now here\n00:22:36.000 we have some extra um configurations\n00:22:39.559 right so we can either decide if we want\n00:22:41.480 to all let these sub agents auto run or\n00:22:44.360 if we want to have human approval now\n00:22:46.400 that can be useful sometimes also for\n00:22:48.080 tools if we actually want to double\n00:22:50.440 check before actually taking an action\n00:22:52.360 right so you can imagine when you send\n00:22:54.159 an email for example you may you want to\n00:22:56.480 actually check before sending it out\n00:22:58.200 then you can use these uh approval\n00:22:59.760 required steps and then uh it will have\n00:23:02.559 to ask for approval before it actually\n00:23:04.000 takes action on that tool or sub agent\n00:23:06.400 now this case I've put them on auto run\n00:23:08.000 and then we have uh two more extra\n\n**output**:\n\nImagine having an AI agent that conducts a comprehensive competitor analysis every day. 🔍\n\nImagine getting daily social media and content ideas based on what works and what doesn’t for your competitors. 💡\n\nThis is exactly what the AI agent I recently built does.\n\nThis agent scrapes data from:\n\n📝 Review websites\n\n📰 News websites\n\n🏠 Homepages\n\n📱 All Social Media\n\n& much more\n\nIt compiles all the data and writes personalized opportunity reports.\n\nBut this is just one use case—this scraping agent can be used for:\n\n🔍 Competitor analysis\n\n🔗 Lead generation\n\n💡 Market research\n\n📄 Content ideas\n\nAnd the best part? It’s 100% no-code. I’m offering the template for free in my community.\n\nCheck out the demo and detailed tutorial in my new YouTube video! 🎥\n\nhttps://lnkd.in/eeVQwHiA\n\n_____\n\nI'm Ben van Sprundel 👋\nI help companies fully leverage AI.\nWork with me: [https://benvansprundel.com](https://benvansprundel.com/)\n\nWatch all my AI tutorials: https://www.youtube.com/@BenAI92\n\nFollow me for more 🔔\n\n## Example 2:\n\n**transcript:** \n\n00:00:00.240 hey guys so in this video I'm going to\n00:00:01.640 show you how to set up an AI automated\n00:00:04.480 personalized video system that I\n00:00:06.600 personally use in my C email Outreach to\n00:00:08.960 get over 18% reply rates and more than\n00:00:11.480 30 meetings booked a month I myself am\n00:00:13.920 pretty shocked about the results these\n00:00:15.320 video emails are getting I personalize\n00:00:17.720 all my outbound emails but these video\n00:00:19.760 emails are outperforming all others and\n00:00:22.439 I don't think it's overused just yet so\n00:00:24.880 in this video I want to show you my\n00:00:26.400 setup and how you can do the same\n00:00:28.519 because I think you can really take\n00:00:29.720 advant vage of this while it's still\n00:00:31.279 relatively unknown so first of all you\n00:00:33.440 might have heard of these platforms like\n00:00:34.960 hen or cesia to personalize videos now\n00:00:38.000 I'm not using those in my opinion there\n00:00:40.360 are two main problems with these\n00:00:41.920 softwares the first one is it's still\n00:00:44.039 not good enough yet they just look too\n00:00:46.239 robotic too impersonal and in the end\n00:00:48.559 just too fake and second of all they can\n00:00:51.199 be quite expensive for these\n00:00:53.160 personalizations so I found a way to\n00:00:55.520 personalize videos without the\n00:00:57.359 robot-like avatars and where it's\n00:00:59.320 actually mostly me talking so if you're\n00:01:01.559 interested in this keep watching and\n00:01:02.960 I'll show you step by step how to set it\n00:01:04.519 up so before showing you the Automation\n00:01:06.840 in [make.com](http://make.com/) I do want to give you a\n00:01:08.280 brief overview of how this AI video\n00:01:10.159 personalization works so basically\n00:01:12.080 consists of two components the first one\n00:01:14.799 is a platform called senspark which we\n00:01:16.960 use to personalize our videos so this is\n00:01:19.360 basically a simple personalization tool\n00:01:21.880 that automatically clones your voice and\n00:01:25.880 personalizes the name of the prospect so\n00:01:28.640 the way it works is I record record a\n00:01:30.240 video and when I record my video I say\n00:01:32.840 hey watermelon in the beginning and then\n00:01:35.000 I do my video as normal then the\n00:01:37.399 software will identify that I said\n00:01:39.399 watermelon and it will change that word\n00:01:42.320 watermelon for the lead's name right by\n00:01:45.479 cloning the voice of the rest of my\n00:01:47.000 video so instead of saying hi hey\n00:01:49.280 watermelon I'll say your name hey Oscar\n00:01:50.960 or hey Jennifer and the second thing it\n00:01:53.759 will do is it'll put the the URL of the\n00:01:56.880 company you're reaching out to in the\n00:01:58.960 background of your video so it looks\n00:02:00.320 like you're scrolling through their\n00:02:01.680 website while you're doing your pitch so\n00:02:05.159 those are two sort of nice little\n00:02:06.719 personalization points I can show you a\n00:02:08.199 quick\n00:02:12.400 example hey Jennifer I just checked out\n00:02:15.080 your website and I thought it was really\n00:02:16.599 interesting what you guys are doing and\n00:02:18.000 I also saw you were hiring for bdr\n00:02:20.239 positions so you can see I say hey\n00:02:22.519 Jennifer and then I'm scrolling through\n00:02:24.319 the website right so is it perfect it's\n00:02:26.680 not uh but I think it works well enough\n00:02:29.480 for people to believe that it's actually\n00:02:31.280 true and also think they sort of fade\n00:02:33.800 fade out your camera at the moment where\n00:02:35.920 you're actually seeing watermelon so\n00:02:37.720 it's hard to see that you're maybe\n00:02:39.120 seeing something different so this is\n00:02:41.280 sort of a nice little personalization\n00:02:43.599 but I wanted to make it even better\n00:02:46.239 right so I use usually in my out\n00:02:49.519 Outreach um context I use a system\n00:02:52.239 called Outreach personalization process\n00:02:54.400 now what is an Outreach personalization\n00:02:55.920 process it basically\n00:02:57.280 means just personalization of of your\n00:03:00.080 emails or your videos is not necessarily\n00:03:02.879 a good thing you need to have a reason\n00:03:05.319 for reaching out to them that's where\n00:03:07.000 you get the highest reply rate right if\n00:03:08.840 you haven't found an observation on this\n00:03:11.440 company that is the reason you're\n00:03:13.440 reaching out to them that is way\n00:03:15.200 stronger than just a personalization\n00:03:16.760 because I could say something like hey I\n00:03:18.239 saw you live in Amsterdam but it's a\n00:03:20.360 personalization but it has nothing to do\n00:03:21.840 with the service I'm offering so we need\n00:03:23.599 an observation that ties in to the\n00:03:26.159 solution we're offering so in my case in\n00:03:29.200 my outb\n00:03:30.360 Outreach in my video Outreach I'm trying\n00:03:32.799 to sell my AI bdr agent services so what\n00:03:36.239 does this service do it basically finds\n00:03:38.599 prospects it researches them it does a\n00:03:40.760 personalize Outreach just like this\n00:03:42.280 system it manages your inbox and even\n00:03:44.439 book me books meeting so it basically\n00:03:46.000 takes over the job of a human bdr agent\n00:03:48.640 so this is the the the service I'm\n00:03:51.000 offering so my personalization process\n00:03:53.439 is I sort of have to find relevant\n00:03:56.319 observations about this company that I\n00:03:59.159 can use in my Outreach and in this case\n00:04:01.560 in these videos so what is the best\n00:04:03.879 possible observation I could find when\n00:04:06.200 I'm offering these kind of\n00:04:08.000 services I in my opinion I think the\n00:04:10.720 best case scenario is when a company is\n00:04:12.959 actually hiring for bdr positions\n00:04:15.480 because then I can come to them and say\n00:04:17.040 hey I saw you're hiring for a bdr\n00:04:18.720 position have you actually considered\n00:04:20.199 using an AI bdr right now not all\n00:04:23.160 companies will be hiring bdr agents so I\n00:04:26.080 need sort of a second a backup\n00:04:27.800 personalization so what could be another\n00:04:29.880 good one it could be they had a recent\n00:04:32.160 funding round why because usually\n00:04:34.320 companies that had a recent funding\n00:04:35.560 round they have to go very hard on sales\n00:04:38.000 and grow Revenue so this would be a good\n00:04:41.160 sort of context uh for them to use my\n00:04:43.639 bdr so this is sort of the system I'm\n00:04:46.280 using I'm going through different\n00:04:48.560 observations I could find from best to\n00:04:50.880 worst until I find one and that one I'll\n00:04:54.320 use as sort of a reason to outreach to\n00:04:56.639 these people so that's the way my\n00:04:59.120 automation is set up so besides just\n00:05:00.800 doing the name and the the website in\n00:05:03.000 the background I'm using a research tool\n00:05:05.919 to find sort of these relevant\n00:05:07.240 observation and if I find that a company\n00:05:10.280 is hiring a bdr I'm using a different\n00:05:12.919 template video template than when a\n00:05:16.280 company for example had a recent funding\n00:05:17.840 round now let's say that they have all\n00:05:20.120 of these things they don't have it you\n00:05:21.919 always need sort of a backup a fallback\n00:05:24.880 personalization which might be a little\n00:05:26.440 bit more generic but you can always use\n00:05:28.919 it when none of the other sort of\n00:05:30.919 observations were found I think this\n00:05:33.319 system is a very good system to think\n00:05:34.840 about outbound personalization anyway\n00:05:37.360 but this is also the system we use I use\n00:05:39.560 here in my [make.com](http://make.com/) automation so you\n00:05:43.000 can hear me say in this one I also saw\n00:05:46.000 you were hiring for bdr positions what\n00:05:48.120 you guys are doing and I also saw you\n00:05:49.720 were hiring for bdr positions now this\n00:05:52.759 is one of my templat so if my research\n00:05:55.319 on this lead finds that they they were\n00:05:57.120 hiring for bdr then I use this video\n00:05:59.240 template but I have a few more right so\n00:06:02.319 I have another one here for example\n00:06:05.000 funding so if they had a recent funding\n00:06:07.599 round I would use this template hi Oscar\n00:06:11.319 I just came across your website and\n00:06:12.840 really liked what you guys are doing I\n00:06:14.639 also noticed you recently have a new\n00:06:16.160 funding round so congrats on that I can\n00:06:19.360 imagine so I use that as a reason in\n00:06:22.240 this one so that's how to [make.com](http://make.com/)\n00:06:23.919 automation is set up you can see here I\n00:06:25.520 have different video templates my actual\n00:06:27.759 one has even more but just for\n00:06:30.319 Simplicity of this video this is the way\n00:06:32.240 it works so now that you have that\n00:06:34.199 context let me get you through this flow\n00:06:37.720 right so this flow starts with my CRM in\n00:06:40.560 this case hopspot which of course is\n00:06:42.000 easy to switch out if you have another\n00:06:43.840 CRM basically I find my new Prospect in\n00:06:46.520 Apollo uh and other platforms that is\n00:06:48.960 automatically synced to my hopspot and\n00:06:51.840 when a new contact is created in hopspot\n00:06:53.960 this flow is triggered so what happens\n00:06:57.120 here is uh the new lead is going to be\n00:06:59.639 sent to a relevance ai ai tool I build\n00:07:02.960 which does research on the lead if you\n00:07:05.039 don't know relevance AI yet I do have a\n00:07:07.000 full tutorial on my YouTube channel on\n00:07:10.360 what it is and how you can build AI\n00:07:12.120 agents and AI tools with relevance AI\n00:07:13.879 but I'm going to show you in this video\n00:07:14.960 too how I've set this up so basically\n00:07:18.360 what this tool does it does the research\n00:07:20.479 on the lead so it finds sort of these\n00:07:23.000 observations that I mentioned before so\n00:07:25.400 it does research on the company and\n00:07:27.479 looks for okay are they hiring for a BD\n00:07:29.639 are uh no okay then we go and check the\n00:07:32.520 next are we uh did they have a recent\n00:07:34.840 funding round and then we go through the\n00:07:37.080 different observation steps now\n00:07:39.000 depending on the research result we use\n00:07:41.039 a router here to send it to different\n00:07:43.879 templates so in this case let's say\n00:07:46.159 they're actually hiring for a bdr then\n00:07:47.680 we send it to this template which is the\n00:07:49.720 template where I say uh I saw you were\n00:07:52.680 hiring for a bdr\n00:07:54.440 agent and if they had a recent funding\n00:07:56.840 route I send it to this template where I\n00:07:58.520 say congrats on the funding round I can\n00:08:00.520 imagine scaling sales is a priority\n00:08:02.280 right now and of course this is the\n00:08:04.800 fallback which would be the most generic\n00:08:06.639 one if we can't find any other\n00:08:07.960 observation we always send it to the\n00:08:09.759 most generic one so this is this is the\n00:08:13.120 relevant AI app this is senspark API I'm\n00:08:15.879 going to show you later in detail how to\n00:08:17.440 set this up but I just want to give you\n00:08:18.960 an overview of how this system works and\n00:08:20.800 then lastly we have uh we send it to\n00:08:23.199 instantly where we actually send it send\n00:08:25.840 the emails to our leads so we upload the\n00:08:28.159 lead and the video onto instantly we\n00:08:30.879 enroll them in the campaign and then\n00:08:32.519 lastly we update our CRM to say that\n00:08:34.519 this lead was enrolled in our called\n00:08:37.479 email Outreach so that's a basic\n00:08:39.519 overview of this automation so now I'll\n00:08:42.000 show you a quick example and through the\n00:08:43.399 example I will then explain step by step\n00:08:46.200 how you can set it up and customize it\n00:08:47.800 to your specific use case so remember as\n00:08:50.920 always all the templates are for free in\n00:08:52.920 the in the description below so let's\n00:08:55.600 say we have a new contact here just have\n00:08:57.600 an example here um that we're going to\n00:09:00.200 pull in so in this case we're just going\n00:09:01.959 to run it manually once so it gets the\n00:09:05.560 new contact now it sends it to the\n00:09:07.959 relevance AI app which is doing the\n00:09:10.360 research on this lead where it's\n00:09:13.320 basically going to try and find if this\n00:09:15.640 companies hiring for bdrs or they had a\n00:09:17.760 recent funding route you can see it's\n00:09:19.360 already done it so in this case the\n00:09:22.120 outcome of my relevant AI\n00:09:24.720 tool we can see is hiring right so it\n00:09:30.040 means that this company's hiring for bdr\n00:09:32.600 and then I simply put set up a filter\n00:09:34.640 here that says if hire if this output of\n00:09:37.959 the relevant CI tool contains hiring\n00:09:40.959 then sent to this and of course in this\n00:09:42.800 template we have it set up with me\n00:09:44.959 saying hey I saw you you were hiring for\n00:09:47.040 a bdr so it has generated the\n00:09:49.600 personalized video it has sent it and\n00:09:51.440 created the instantly lead and campaign\n00:09:54.279 and it has updated the CRM so we cannot\n00:09:57.200 check quickly in send spark what's\n00:09:58.640 happening so if we go to our campaign\n00:10:00.399 you can see it's generating this new\n00:10:03.320 video if we click\n00:10:06.959 refresh we can see it generated the\n00:10:09.519 personalized video with the background\n00:10:11.040 of the company hey Derek I just checked\n00:10:13.240 out your we and now we can also see if\n00:10:15.560 it was added to our instantly campaign\n00:10:17.760 you can see he also was added to our\n00:10:19.959 instantly campaign where if we go in the\n00:10:23.079 sequence I have the video pasted here\n00:10:25.680 I'll show you later how you how you do\n00:10:27.560 this but you can see this is how it\n00:10:29.880 works so I'll go step by step I start\n00:10:31.519 with\n00:10:32.200 hopspot so of course you can make this\n00:10:35.880 uh you can trigger this from any CRM or\n00:10:38.000 even from Google Sheets right so in my\n00:10:40.040 case I've done is set up a search for\n00:10:42.760 contact now in my case I search for\n00:10:44.839 contacts with a filter right so with a\n00:10:47.480 filter that is enrolled does not equal\n00:10:50.480 yes right because basically what I do\n00:10:52.399 every person that is enrolled in my\n00:10:54.120 instantly campaigns I update here in the\n00:10:56.160 end to yes meaning that they won't be en\n00:10:59.639 again right so I just find anyone who's\n00:11:02.639 not enrolled through this search for\n00:11:05.040 contact I I I in this case I only limit\n00:11:07.639 it to one and then I run it every 5\n00:11:09.600 minutes and that lead will get pulled\n00:11:12.079 and then that will be sent to relevance\n00:11:14.240 AI now I'm going to show you the\n00:11:15.160 relevance AI app right now how I've set\n00:11:17.120 it up and how you can customize it so\n00:11:19.279 for relevance AI you always need the\n00:11:20.839 HTTP model which I'm going to show you\n00:11:22.760 also how to set that up but if we're in\n00:11:24.480 the relevant CI dashboard we can go to\n00:11:26.880 the tool I\n00:11:28.000 created which is the personalized video\n00:11:32.240 researcher now if you've never seen\n00:11:34.079 relevant say I yeah I do recommend you\n00:11:35.760 check out my other YouTube video where I\n00:11:38.040 explain in detail how to set this up but\n00:11:39.959 I will go through the step by step in\n00:11:41.959 this video too so the best way to show\n00:11:44.440 you how this one works is by actually\n00:11:45.880 putting in an example so I'll just go\n00:11:48.040 back and put in a quick example and let\n00:11:49.680 this tool run so here are the user\n00:11:51.600 inputs I defined so in this case you\n00:11:53.000 have the contact name the company name\n00:11:55.120 and the contact email which I get in of\n00:11:57.240 course from hopspot right these are the\n00:11:58.600 user inputs and I st store these user\n00:12:00.920 inputs into the variables as always in\n00:12:03.079 relevance AI which we're going to use in\n00:12:05.000 the next steps um now the first step is\n00:12:08.000 to find the company URL right because we\n00:12:10.320 suppose we only have the name in this\n00:12:12.440 case so basically what we're doing is\n00:12:14.600 we're just looking at the email and\n00:12:15.959 taking the domain name because these are\n00:12:17.519 all professional emails or work emails\n00:12:20.199 so we find the domain name we do Google\n00:12:21.959 search and find the uh we do a Google\n00:12:24.839 search API here right and we Dre the\n00:12:28.720 Google search\n00:12:30.160 uh result finding we try and find the\n00:12:32.600 company URL which we found here right so\n00:12:35.120 we St store this company URL into this\n00:12:37.800 variable and again we're going to do a\n00:12:39.839 Google search in this case I'm looking\n00:12:42.440 for the LinkedIn profile of the company\n00:12:44.040 too so we put in the company URL plus\n00:12:46.959 LinkedIn we do Google search we feed it\n00:12:48.959 to an LM to say try and find the company\n00:12:52.959 LinkedIn URL which you found here I\n00:12:55.440 think in this actual flow this one is\n00:12:57.120 not even necessary I think it's still\n00:12:58.839 there because of I edited this tool from\n00:13:01.600 another one where I actually did need\n00:13:03.199 the LinkedIn but anyway you can see I\n00:13:06.360 found a LinkedIn URL here of the company\n00:13:09.440 and here I'm actually also trying to\n00:13:10.839 find the LinkedIn of the contact person\n00:13:14.360 so you can see similar process and we\n00:13:16.199 found also LinkedIn of the of the\n00:13:19.240 contact person now here's where the\n00:13:21.320 interesting part starts where's the\n00:13:22.639 observation mining right so here we're\n00:13:24.120 going to sort of look for those\n00:13:25.560 observations that I mentioned before\n00:13:27.880 which we want to personalize our video\n00:13:29.120 videos on so the first one is of course\n00:13:31.000 are they hiring for a bdr or any sales\n00:13:33.760 position right so basically what we do\n00:13:35.839 is we use the Google search API step if\n00:13:38.639 you don't know you could just add them\n00:13:40.079 here they're already built into\n00:13:41.240 relevance AI the Google search API and\n00:13:44.079 all we do is we put in the variable here\n00:13:46.680 in the double brackets of the company\n00:13:48.639 URL and we add in careers because we\n00:13:50.639 want to add find the career page and\n00:13:53.959 with the career page we're going to\n00:13:55.399 scrape that page and actually sort of\n00:13:57.120 identify if they're hiring for these\n00:13:59.120 specific positions or not so the thing\n00:14:01.600 is many of these companies have actually\n00:14:03.839 have uh multiple career sites right they\n00:14:07.199 might have one on their own website then\n00:14:08.759 they have some on these public websites\n00:14:11.720 where they post platforms Etc so what I\n00:14:13.959 instruct this L&M to do is actually to\n00:14:16.680 extract three different uh career\n00:14:20.120 websites for this company so it will I\n00:14:24.800 can I can read it quickly your\n00:14:26.079 professional Google search researcher\n00:14:27.519 specializes in identifying the career\n00:14:29.720 pages and URLs of the following company\n00:14:32.920 so your task going to be to identify the\n00:14:34.959 career page of this company right so\n00:14:37.759 basically you can read this in detail\n00:14:39.279 again in the template but basically what\n00:14:41.279 it does is like up to three different\n00:14:43.800 career pages and then output this um\n00:14:47.759 result into a Json right why do we do a\n00:14:50.560 Json because we want to separate the\n00:14:53.360 outputs if you want to know in detail\n00:14:54.880 again I have more information on Json in\n00:14:57.000 my other video uh anyway we get we get\n00:15:00.160 three different URLs here right and then\n00:15:03.720 we use the convert string to Json where\n00:15:05.480 we actually get the Json into the\n00:15:07.399 multiple outputs and then we can store\n00:15:10.199 each of these in a different variable\n00:15:12.560 and then what we're doing is we're using\n00:15:15.079 these to and we're going to scrape all\n00:15:17.959 of these pages right so we put in the\n00:15:20.560 first variable here in again this is the\n00:15:23.000 build-in web scraper of relevance AI so\n00:15:25.720 we scraped the first website here so you\n00:15:28.560 can see here's all the scraped here's\n00:15:31.399 the scraped page we scraped the second\n00:15:33.600 page\n00:15:35.759 too and the third page and then we feed\n00:15:38.360 this all to an L&M and say identify if\n00:15:41.759 this company as a top tier AI analyst\n00:15:43.920 you extracting meanful insights from\n00:15:45.880 complex data sources uh you've been as\n00:15:48.680 tasked with analyzing the scraped career\n00:15:50.519 pages of company and in this\n00:15:52.959 case right you will identify the amount\n00:15:55.480 of open positions this company has for\n00:15:57.480 the following job R sales development\n00:15:59.360 representative or Business Development\n00:16:01.319 representative bdr so we can see site\n00:16:04.680 sit has one open position for sales\n00:16:06.839 development representative and one open\n00:16:08.600 position for business development\n00:16:10.079 representative so in this case I add in\n00:16:13.519 one more step I basically put in this\n00:16:16.079 outcome and it's sort of an evaluation\n00:16:17.839 step and say you're worldclass AI\n00:16:21.240 categorization specialist you've been uh\n00:16:23.600 tasked to analyze the following\n00:16:25.079 observation result so here we'll\n00:16:27.040 basically say okay is this\n00:16:30.199 searching if the company is hiring for\n00:16:32.600 the\n00:16:33.639 bdr uh uh position a success successful\n00:16:37.880 observation or not and in this case we\n00:16:40.480 have successful so because it's\n00:16:42.839 successful we're actually not running\n00:16:45.000 the next step which is in the next step\n00:16:46.360 we're going to look for the funding\n00:16:48.279 round if they had a recent funding round\n00:16:50.240 but as we've already in this case had\n00:16:52.360 the best observation possible which is\n00:16:54.160 they're hiring for a bdr we are put in a\n00:16:57.319 a condition in the rest of these steps\n00:16:59.160 that you don't have to\n00:17:01.240 run right if the if the outcome of this\n00:17:04.640 was actually successful so this whole\n00:17:06.559 part shouldn't have to run and then the\n00:17:08.240 last one is just categorization right so\n00:17:10.400 it puts a categorization on the research\n00:17:13.039 result which this is the output we get\n00:17:15.919 inside of our make right as you can\n00:17:19.119 see the output here of our tool is\n00:17:22.319 highering Cadence right and that is\n00:17:25.280 exactly the filter we set up in this\n00:17:27.160 next step so we put a router here to\n00:17:29.000 sort of decide to which video template\n00:17:30.559 it goes so how do you connect this\n00:17:33.280 relevance AI um app so basically we have\n00:17:36.559 to set up an\n00:17:39.160 HTTP make a request\n00:17:41.919 module then the URL we're going to find\n00:17:44.720 if you if you came and you've cloned\n00:17:46.720 this tool you can you will come to a\n00:17:51.400 screen just like this and then you have\n00:17:53.200 this option API where an endpoint which\n00:17:55.480 you can copy and paste in the URL then\n00:17:59.880 you can paste that there then you have\n00:18:02.080 method which is\n00:18:03.840 post then you have to add two\n00:18:06.640 headers and I can show you that here the\n00:18:09.960 first header is content type application\n00:18:12.520 Json you can also find that back\n00:18:14.880 here right in the sample curl you can\n00:18:17.120 see Conta type application Json so you\n00:18:19.600 can literally just copy and paste this\n00:18:21.480 and then the second header will be the\n00:18:22.960 header will be authorization and then\n00:18:25.159 you'll have to put in as the value your\n00:18:26.919 API key so you can generate your AP API\n00:18:29.600 key right here so you click on that you\n00:18:33.320 copy that you paste it in the second\n00:18:36.360 here I'm not going to show you my API\n00:18:38.440 key but that's it and then in the end\n00:18:41.679 all you\n00:18:42.799 do so you do Post you paste in the URL\n00:18:45.480 you put in the headers then you have to\n00:18:47.280 always select raw as the body type and\n00:18:50.480 content type is application\n00:18:52.919 Json and then for the request content\n00:18:55.320 you can also go back and then you copy\n00:18:57.799 this request body\n00:19:00.000 and here's where you put in the\n00:19:01.320 variables so in this case our app our AI\n00:19:04.919 app needs the contact name so we go back\n00:19:07.200 to hopspot in this case if you have a\n00:19:08.559 different CRM of course you have to pull\n00:19:10.200 it from there so we have to get the\n00:19:15.280 name between these quotation marks right\n00:19:19.080 the company name and the contact email\n00:19:22.039 so you do that for all three and then\n00:19:25.120 you always select here par response and\n00:19:27.720 okay then that one is SA set\n00:19:29.960 up and then I'll show you now how to\n00:19:33.760 actually set up this um senspark API so\n00:19:38.159 again right this template is available\n00:19:40.039 in the description below so for the\n00:19:41.520 senspark API you do need the paid plan\n00:19:44.159 so they actually say that you only have\n00:19:45.679 access to the API at the $150 plan but\n00:19:48.400 that's not true you can actually access\n00:19:49.840 it with a $50 plan $50 plan I think you\n00:19:52.280 get $500 personalized video minutes uh\n00:19:56.080 which is quite good and then you go to\n00:19:58.720 the API credential Tab and these are\n00:20:02.559 going to be the important ones is your\n00:20:04.440 API workspace\n00:20:06.799 ID and of course your API key and secret\n00:20:10.080 key right so if you have downloaded my\n00:20:13.320 template my [make.com](http://make.com/) template you will\n00:20:15.120 find this here already so if you go in\n00:20:17.520 here you will see this\n00:20:20.440 URL and you will have to switch out this\n00:20:24.320 part the part behind workspaces you'll\n00:20:27.000 have to fill out your workspace which\n00:20:29.640 you can find inside of sense Park here\n00:20:32.559 right so you copy that in and you change\n00:20:35.320 this part and then also the second part\n00:20:37.679 you're going to change is the Dynamics\n00:20:39.520 now the Dynamics is the campaign the\n00:20:41.480 personalized campaign you created so I\n00:20:45.159 will show you here here are all the\n00:20:46.840 different campaigns for example this is\n00:20:49.120 my hiring like the bdr campaign so I\n00:20:52.720 look at the URL and then I just take\n00:20:55.000 this last part before\n00:20:57.120 list and that part part is the dynamic\n00:20:59.919 ID so we copy that and we paste it in\n00:21:03.840 this part before Prospect right and\n00:21:06.559 that's basically how it identifies to\n00:21:07.919 which campaign it should send it so for\n00:21:10.240 each of my templates that part is\n00:21:12.799 different because I'm using different\n00:21:15.919 templates so and then in in um sens\n00:21:19.600 spark you actually need three different\n00:21:21.600 headers right we have the same one as in\n00:21:23.600 relevant content type application Json\n00:21:25.880 now the second header will be your API\n00:21:27.919 key which you find back here in your API\n00:21:31.919 credential dashboard so here you have\n00:21:34.559 your API key please don't use it guys\n00:21:36.919 you'll need the secret one anyway so you\n00:21:39.279 copy in the API key here and and then\n00:21:43.080 the third header is the uh secret API\n00:21:45.400 key which you can generate on that same\n00:21:47.200 screen right create new key and then\n00:21:48.760 you'll get your secret key here so those\n00:21:52.000 are the three headers then lastly you\n00:21:54.360 will need to select again body type raw\n00:21:56.880 content type application Json\n00:21:59.799 here's the request content you can find\n00:22:01.200 it in the documentation page of senspark\n00:22:03.000 or just use my template here because it\n00:22:05.840 will be the same for you um and then you\n00:22:08.960 fill out of course the variables here\n00:22:11.200 the contact name with the variable from\n00:22:13.520 hopspot first name email and a\n00:22:16.200 background URL right this is one is\n00:22:17.799 important because this is what zark puts\n00:22:20.200 behind your video all right so this this\n00:22:22.840 is the one of the company of course and\n00:22:25.279 part response yes and then we're all set\n00:22:27.360 up so the way this works then is we then\n00:22:32.200 send the lead to instantly right so we\n00:22:35.039 we add them to a campaign of course you\n00:22:36.840 can change this out for your specific\n00:22:39.480 email uh sender or provider but in my\n00:22:43.159 case I use instantly so I I select the\n00:22:45.120 campaign I add in the lead and the first\n00:22:47.799 name now I actually didn't have to add\n00:22:49.559 in the video uh why because the video\n00:22:52.679 actually takes a little bit to put in\n00:22:55.039 and what you can do this is what\n00:22:56.919 senspark has as a feature\n00:22:58.960 if you're in your Dynamic videos you can\n00:23:01.679 actually just paste in a snippet already\n00:23:04.440 inside of your instantly campaign so if\n00:23:07.440 you go here to share\n00:23:09.880 campaign and you click your email\n00:23:12.840 provider they have many available\n00:23:14.559 already in my case instantly you can\n00:23:16.960 just copy a snippet a code snippet you\n00:23:20.120 then go to your instantly campaign and\n00:23:22.000 let's\n00:23:22.799 say you have a new email\n00:23:26.320 here let's create a new one\n00:23:32.799 so all you do here is you do code view\n00:23:36.080 you paste in the snippet go back and now\n00:23:40.320 it will auto automatically sort of\n00:23:41.760 personalize it so we'll identify through\n00:23:43.799 the email that uh which personalized\n00:23:47.360 email it is from these from these list\n00:23:50.640 you you generate so you don't actually\n00:23:53.600 have to send it inside of instantly you\n00:23:56.039 just can paste in this snippet of code\n00:23:58.400 and they will automatically identify\n00:24:00.320 which video to pull for which contact so\n00:24:05.400 that's all you need to do there and then\n00:24:07.799 you you can send your personalized email\n00:24:09.960 so that's it and then the last part\n00:24:12.120 really is I update my CRM so the the\n00:24:17.120 enrolled column which tells me if these\n00:24:19.520 people have been enrolled in my\n00:24:21.279 personalized Outreach or not I Chang the\n00:24:23.279 value to yes so in that case I won't\n00:24:25.840 pull them again and put them in a new\n00:24:28.000 campaign\n00:24:29.320 so that's the setup I have of course to\n00:24:31.840 customize this to you you do have to\n00:24:33.960 think about what is your use case right\n00:24:36.240 what are you selling what are good\n00:24:38.799 observations uh for you to reach out to\n00:24:42.120 and then of course besides the\n00:24:43.600 personalization of the name and the\n00:24:45.919 background you want to change your\n00:24:47.440 relevance AI app to sort of find these\n00:24:51.480 um observation points that are relevant\n00:24:53.520 to you and then make your templates\n00:24:55.559 based on that now if you want the really\n00:24:57.440 simple version you you can also just\n00:24:59.679 leave out this part of relevant say High\n00:25:02.679 and the router part and basically just\n00:25:04.600 go hopspot to send spark and then add it\n00:25:08.799 to your instantly campaign and hop spot\n00:25:11.480 and in that case of course you don't\n00:25:12.720 have the extra personalization of the\n00:25:14.480 observation but you will still have an\n00:25:16.559 automatic\n00:25:17.880 personalization of uh the name and the\n00:25:20.799 background URL in your video uh I hope I\n00:25:24.600 hope you guys enjoyed this video and\n00:25:26.159 learned something today I know it's a\n00:25:27.960 little bit of a long one and maybe a\n00:25:29.240 little bit complicated but if you do\n00:25:31.080 have any questions please let me know in\n00:25:32.480 the comments below if you got any value\n00:25:34.559 out of it I'd appreciate it a lot if you\n00:25:36.440 can like And subscribe to my channel I\n00:25:38.320 try to get a lot more content like this\n00:25:40.200 out and I am also available for\n00:25:42.840 Consulting calls if you're interested in\n00:25:45.159 some business solution for yourself and\n00:25:47.679 thank you so much for watching and I\n00:25:49.080 hope to see you in the next one CH Chow\n\n**Output:**\n\nI've created hundreds of automations by now. \n\nThis one had the biggest impact early on.\n\n📈 It consistently achieved over 10% reply rates on cold email and landed my first 10 clients.\n\nGetting initial clients is tough — no trust or credibility.\n\nVideo outreach can bridge this gap, but personalizing videos for hundreds of leads manually is impossible.\n\nSo, I automated it using Relevance AI, Make, and SendSpark.\n\nAnd magic happened— 100% automated personalized videos WITHOUT AI avatars.\n\nHere’s what it does:\n🎥 Each video:\n• Mentions the lead's name\n• Scrolls through their website\n• Highlights a relevant company observation\n\nCheck out the full tutorial: https://www.youtube.com/watch?v=XfJB8jZr1vg&t=354s\n\nGet the free template: https://benvansprundel.gumroad.com/l/video-outreach-system\n\n# The Transcript for today’s post:\n{{1.Transcript}}\n\n# The free template link (for the CTA):\n{{1.`Free template`}}\n\n\n\n" + } + ] + }, + "metadata": { + "designer": { + "x": 912, + "y": -203 + }, + "restore": { + "parameters": { + "__IMTCONN__": { + "label": "My OpenAI connection", + "data": { + "scoped": "true", + "connection": "openai-gpt-3" + } + } + }, + "expect": { + "select": { + "label": "Create a Chat Completion (GPT Models)" + }, + "logit_bias": { + "mode": "chose" + }, + "response_format": { + "mode": "chose", + "label": "Text" + }, + "stop": { + "mode": "chose" + }, + "additionalParameters": { + "mode": "chose" + }, + "model": { + "mode": "edit" + }, + "messages": { + "mode": "chose", + "items": [ + { + "role": { + "mode": "chose", + "label": "System" + } + }, + { + "role": { + "mode": "chose", + "label": "User" + } + } + ] + } + } + }, + "parameters": [ + { + "name": "__IMTCONN__", + "type": "account:openai-gpt-3", + "label": "Connection", + "required": true + } + ], + "expect": [ + { + "name": "select", + "type": "select", + "label": "Select Method", + "required": true, + "validate": { + "enum": [ + "chat", + "prompt" + ] + } + }, + { + "name": "max_tokens", + "type": "number", + "label": "Max Tokens", + "required": true + }, + { + "name": "temperature", + "type": "number", + "label": "Temperature", + "validate": { + "max": 2, + "min": 0 + } + }, + { + "name": "top_p", + "type": "number", + "label": "Top P", + "validate": { + "max": 1, + "min": 0 + } + }, + { + "name": "n_completions", + "type": "number", + "label": "Number" + }, + { + "name": "frequency_penalty", + "type": "number", + "label": "Frequency Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "presence_penalty", + "type": "number", + "label": "Presence Penalty", + "validate": { + "max": 2, + "min": -2 + } + }, + { + "name": "logit_bias", + "type": "array", + "label": "Token Probability", + "spec": { + "spec": [ + { + "name": "token", + "type": "text", + "label": "Token ID", + "required": true + }, + { + "name": "probability", + "type": "number", + "label": "Probability", + "required": true, + "validate": { + "max": 100, + "min": -100 + } + } + ], + "type": "collection", + "label": "Token Probability", + "name": "value" + } + }, + { + "name": "response_format", + "type": "select", + "label": "Response Format", + "validate": { + "enum": [ + "text", + "json_object" + ] + } + }, + { + "name": "seed", + "type": "integer", + "label": "Seed" + }, + { + "name": "stop", + "type": "array", + "label": "Stop Sequences", + "validate": { + "maxItems": 4 + }, + "spec": { + "type": "text", + "label": "Stop Sequence", + "name": "value" + } + }, + { + "name": "additionalParameters", + "type": "array", + "label": "Other Input Parameters", + "spec": { + "spec": [ + { + "name": "key", + "type": "text", + "label": "Parameter Name", + "required": true + }, + { + "name": "type", + "type": "select", + "label": "Input Type", + "options": [ + { + "label": "Text", + "value": "text", + "nested": [ + { + "name": "value", + "type": "text", + "label": "Parameter Value" + } + ], + "default": true + }, + { + "label": "Number", + "value": "number", + "nested": [ + { + "name": "value", + "type": "number", + "label": "Parameter Value" + } + ] + }, + { + "label": "Boolean", + "value": "boolean", + "nested": [ + { + "name": "value", + "type": "boolean", + "label": "Parameter Value" + } + ] + }, + { + "label": "Date", + "value": "date", + "nested": [ + { + "name": "value", + "type": "date", + "label": "Parameter Value" + } + ] + }, + { + "label": "Any", + "value": "any", + "nested": [ + { + "name": "value", + "type": "any", + "label": "Parameter Value" + } + ] + } + ] + } + ], + "type": "collection", + "label": "Input Parameter", + "name": "value" + } + }, + { + "name": "model", + "type": "select", + "label": "Model", + "required": true + }, + { + "name": "messages", + "type": "array", + "label": "Messages", + "required": true, + "spec": { + "spec": [ + { + "name": "role", + "type": "select", + "label": "Role", + "options": [ + { + "label": "System", + "value": "system" + }, + { + "label": "User", + "value": "user" + }, + { + "label": "Assistant", + "value": "assistant" + } + ], + "required": true + }, + { + "name": "content", + "type": "text", + "label": "Message Content" + } + ], + "type": "collection", + "label": "Message", + "name": "value" + } + } + ], + "advanced": true + } + }, + { + "id": 8, + "module": "json:CreateJSON", + "version": 1, + "parameters": { + "type": 180294, + "space": "" + }, + "mapper": { + "1": "{{2.result}}", + "2": "{{11.result}}", + "3": "{{12.result}}", + "4": "{{13.result}}" + }, + "metadata": { + "designer": { + "x": 1166, + "y": -13 + }, + "restore": { + "parameters": { + "type": { + "label": "My data structure" + }, + "space": { + "label": "Empty" + } + } + }, + "parameters": [ + { + "name": "type", + "type": "udt", + "label": "Data structure", + "required": true + }, + { + "name": "space", + "type": "select", + "label": "Indentation", + "validate": { + "enum": [ + "tab", + "2", + "4" + ] + } + } + ], + "expect": [ + { + "name": "1", + "type": "text", + "label": null + }, + { + "name": "2", + "type": "text", + "label": null + }, + { + "name": "3", + "type": "text", + "label": null + }, + { + "name": "4", + "type": "text", + "label": null + } + ] + } + }, + { + "id": 6, + "module": "gateway:WebhookRespond", + "version": 1, + "parameters": {}, + "mapper": { + "body": "{{8.json}}", + "status": "200", + "headers": [] + }, + "metadata": { + "designer": { + "x": 1470, + "y": 0 + }, + "restore": { + "expect": { + "headers": { + "mode": "chose" + } + } + }, + "expect": [ + { + "name": "status", + "type": "uinteger", + "label": "Status", + "required": true, + "validate": { + "min": 100 + } + }, + { + "name": "body", + "type": "any", + "label": "Body" + }, + { + "name": "headers", + "spec": [ + { + "name": "key", + "type": "text", + "label": "Key", + "required": true, + "validate": { + "max": 256 + } + }, + { + "name": "value", + "type": "text", + "label": "Value", + "required": true, + "validate": { + "max": 4096 + } + } + ], + "type": "array", + "label": "Custom headers", + "validate": { + "maxItems": 16 + } + } + ], + "advanced": true + } + } + ], + "metadata": { + "instant": true, + "version": 1, + "scenario": { + "roundtrips": 1, + "maxErrors": 3, + "autoCommit": true, + "autoCommitTriggerLast": true, + "sequential": false, + "slots": null, + "confidential": false, + "dataloss": false, + "dlq": false, + "freshVariables": false + }, + "designer": { + "orphans": [] + }, + "zone": "us1.make.com" + } +} \ No newline at end of file diff --git a/backend/data/audit.yml b/backend/data/audit.yml new file mode 100644 index 0000000000000000000000000000000000000000..c0df3094d9eb3cbfa371c60771455500dd008061 --- /dev/null +++ b/backend/data/audit.yml @@ -0,0 +1,7 @@ +name: Weekly Audit +on: + schedule: + - cron: '0 0 * * 0' +jobs: + audit: + runs-on: ubuntu-latest \ No newline at end of file diff --git a/backend/data/cost_alert_rules.yaml b/backend/data/cost_alert_rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..82156259e475e2847d024c31b11ca99ebbfd9c80 --- /dev/null +++ b/backend/data/cost_alert_rules.yaml @@ -0,0 +1,17 @@ +rules: + - name: "agentic-spike-alert" + metric: "aws_cost_explorer_total" + threshold: 500 + actions: + - type: "scale_down" + target: "k8s_optimizer" + severity: "high" + - type: "notify" + channels: ["slack#finops", "pagerduty"] + + - name: "idle-resource-alert" + metric: "cpu_utilization" + threshold: 15% + actions: + - type: "schedule_termination" + delay: "24h" diff --git a/backend/data/cost_analytics.json b/backend/data/cost_analytics.json new file mode 100644 index 0000000000000000000000000000000000000000..8aff0a0949719aa09b6da85678fa1ca66c55bf43 --- /dev/null +++ b/backend/data/cost_analytics.json @@ -0,0 +1 @@ +{"dashboard": "Cost Analytics", "charts": [...] } \ No newline at end of file diff --git a/backend/data/deploy.yml b/backend/data/deploy.yml new file mode 100644 index 0000000000000000000000000000000000000000..62eaa85942649a0c2af364ca83855af7c0b3a228 --- /dev/null +++ b/backend/data/deploy.yml @@ -0,0 +1,27 @@ +name: Deploy Agentic AI + +on: [push] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Build Docker + run: | + docker build -t agentic . + echo "${{ secrets.DOCKER_PASS }}" | docker login -u "${{ secrets.DOCKER_USER }}" --password-stdin + docker tag agentic:latest your-repo/agentic:${{ github.sha }} + docker push your-repo/agentic:${{ github.sha }} + + - name: Deploy to DO + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.DO_HOST }} + username: ${{ secrets.DO_USER }} + key: ${{ secrets.DO_KEY }} + script: | + docker pull your-repo/agentic:${{ github.sha }} + docker stop agentic || true + docker run --rm -d -p 8080:8080 --name agentic your-repo/agentic:${{ github.sha }} diff --git a/backend/data/docker-compose.yml b/backend/data/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..3c08263a8dca812fffd0398939904caa938ea735 --- /dev/null +++ b/backend/data/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3.8' + +services: + agentic: + build: . + ports: + - "8080:8080" + deploy: + resources: + limits: + cpus: '2' + memory: 2G + volumes: + - ./config:/app/config:ro + - ./logs:/app/logs + + watchdog: + image: containrrr/watchtower + volumes: + - /var/run/docker.sock:/var/run/docker.sock + command: --interval 30 --cleanup diff --git a/backend/data/fatigue_config.yaml b/backend/data/fatigue_config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ffba725a19f61aec0b484e55771fcc29c675d433 --- /dev/null +++ b/backend/data/fatigue_config.yaml @@ -0,0 +1,2 @@ +fatigue_threshold: 0.4 +curiosity_drop_rate: 0.6 \ No newline at end of file diff --git a/backend/data/integration_test_2025-04-07.json b/backend/data/integration_test_2025-04-07.json new file mode 100644 index 0000000000000000000000000000000000000000..d59ee244cc547e33cbb9fa353343131228164177 --- /dev/null +++ b/backend/data/integration_test_2025-04-07.json @@ -0,0 +1 @@ +{"test": "results", "status": "PASS_WITH_WARNINGS"} \ No newline at end of file diff --git a/backend/data/product.yaml b/backend/data/product.yaml new file mode 100644 index 0000000000000000000000000000000000000000..98d22be983482cee087d9e2436e3eb2562256cb3 --- /dev/null +++ b/backend/data/product.yaml @@ -0,0 +1,14 @@ +AWSTemplateFormatVersion: "2010-09-09" +Description: Agentic ROI Calculator +Resources: + ROIOptimizerLambda: + Type: AWS::Lambda::Function + Properties: + Handler: index.handler + Role: arn:aws:iam::123456789012:role/lambda-execute + Code: + ZipFile: | + def handler(event, context): + return {"statusCode": 200, "body": "ROI Ready"} + Runtime: python3.8 + Timeout: 30 diff --git a/backend/data/release.yml b/backend/data/release.yml new file mode 100644 index 0000000000000000000000000000000000000000..5434498f4e2b36493068b73881a115937eec276b --- /dev/null +++ b/backend/data/release.yml @@ -0,0 +1,16 @@ +name: Release +on: + push: + tags: v* + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: ./scripts/sign_release.sh + - uses: softprops/action-gh-release@v1 + with: + files: | + agentic-deployment-v5.0.zip + agentic-deployment-v5.0.zip.asc diff --git a/backend/data/risk_monitor.json b/backend/data/risk_monitor.json new file mode 100644 index 0000000000000000000000000000000000000000..f4ae8cd357dfade23a8ec111463e66fcaf807c85 --- /dev/null +++ b/backend/data/risk_monitor.json @@ -0,0 +1,41 @@ +{ + "name": "Agentic Risk Monitor", + "description": "Tracks AI/human phase approvals", + "cards": [ + { + "card_title": "Risk Distribution", + "display": "bar", + "query": { + "database": 1, + "type": "native", + "native": { + "query": "SELECT phase, risk_score, COUNT(*) FROM master_plan GROUP BY phase, risk_score" + } + } + }, + { + "card_title": "Auto-Approval Rate", + "display": "gauge", + "query": { + "database": 1, + "type": "native", + "native": { + "query": "SELECT (SUM(CASE WHEN risk_score <= 4 THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) AS auto_approve_percent FROM master_plan" + }, + "visualization_settings": { + "gauge.min": 0, + "gauge.max": 100 + } + } + } + ], + "parameters": [ + { + "name": "phase_filter", + "type": "category", + "values_query": { + "query": "SELECT DISTINCT phase FROM master_plan" + } + } + ] +} diff --git a/backend/data/sbom.json b/backend/data/sbom.json new file mode 100644 index 0000000000000000000000000000000000000000..35b59730e60e5c9f6cb4fb2bb47da4fba6145bac --- /dev/null +++ b/backend/data/sbom.json @@ -0,0 +1,11 @@ +{ + "artifacts": [ + { + "name": "supervisor.py", + "version": "3.2.0", + "type": "python", + "licenses": ["MIT"], + "purl": "pkg:pypi/supervisor@3.2.0" + } + ] +} diff --git a/backend/data/supervisor_config.yml b/backend/data/supervisor_config.yml new file mode 100644 index 0000000000000000000000000000000000000000..5de76315a5c0f9a349a5110ae41b025314ecfa2d --- /dev/null +++ b/backend/data/supervisor_config.yml @@ -0,0 +1,5 @@ +workflow_api: "https://workflow.example.com/v1" +master_plan_path: "/tables/master_plan_v3.2.csv" +alerts: + pagerduty: "https://events.pagerduty.com/v2/enqueue" + slack: "https://hooks.slack.com/services/..." diff --git a/backend/data/sync_log.txt b/backend/data/sync_log.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/backend/data/trait_bindings.json b/backend/data/trait_bindings.json new file mode 100644 index 0000000000000000000000000000000000000000..ae7e0065eaa87be10ececa5d16f6e71ed6cd3ece --- /dev/null +++ b/backend/data/trait_bindings.json @@ -0,0 +1,6 @@ + +{ + "perception": {"agent": "visual_agent", "traits": ["object_recognition", "depth_processing"]}, + "attention": {"agent": "awareness_agent", "traits": ["focus_modulation", "salience_detection"]}, + "memory": {"agent": "mnemonic_agent", "traits": ["episodic_recall", "semantic_indexing"]} +} diff --git a/backend/data/values-agentic.yaml b/backend/data/values-agentic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2b85617b409c2cc518ca5b56dc47e096dc98043a --- /dev/null +++ b/backend/data/values-agentic.yaml @@ -0,0 +1,23 @@ +global: + licenseKey: "" + tier: "pro" + +autoscaling: + enabled: true + minReplicas: 3 + maxReplicas: 10 + targetCPU: 60 + +monitoring: + prometheus: + enabled: true + alerts: + slackWebhook: "https://hooks.slack.com/services/..." + +resources: + limits: + cpu: 2 + memory: 4Gi + requests: + cpu: 500m + memory: 1Gi diff --git a/backend/deploy_from_csv.tf b/backend/deploy_from_csv.tf new file mode 100644 index 0000000000000000000000000000000000000000..842d0513e9609ac6e4e1d2fa0aa4eb0628d7a1aa --- /dev/null +++ b/backend/deploy_from_csv.tf @@ -0,0 +1,37 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + } +} + +data "csvdecode" "master_plan" { + file = "${path.module}/../tables/master_plan_v3.2.csv" +} + +resource "aws_iam_role" "agent_roles" { + for_each = { for idx, row in data.csvdecode.master_plan.records : + row.Component => row if contains(["API Auth", "Cost Management"], row.Component) } + + name = "agentic-${lower(each.key)}-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17", + Statement = [{ + Action = "sts:AssumeRole", + Effect = "Allow", + Principal = { + Service = "lambda.amazonaws.com" + } + }] + }) +} + +resource "aws_appautoscaling_target" "agent_scale" { + for_each = data.csvdecode.master_plan.records + service_namespace = "lambda" + scalable_dimension = "lambda:function:ProvisionedConcurrency" + min_capacity = each.value.Automation_Level * 2 + max_capacity = each.value.Automation_Level * 10 +} diff --git a/backend/digs_engine/agent_linker.py b/backend/digs_engine/agent_linker.py new file mode 100644 index 0000000000000000000000000000000000000000..2d54600c25c51e423742bc74de44bc38838d7f58 --- /dev/null +++ b/backend/digs_engine/agent_linker.py @@ -0,0 +1 @@ +# Matches DIGS segments to agent traits \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/comparative_analysis.py b/backend/digs_engine/digest_paths/comparative_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..faa7bd043e59cc5c9a95566aa5c870aaa20d6120 --- /dev/null +++ b/backend/digs_engine/digest_paths/comparative_analysis.py @@ -0,0 +1 @@ +# Comparative Analysis.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/conceptual_extraction.py b/backend/digs_engine/digest_paths/conceptual_extraction.py new file mode 100644 index 0000000000000000000000000000000000000000..778e4bcbd2ed9b9e2454bb53df7b29a39d6666e0 --- /dev/null +++ b/backend/digs_engine/digest_paths/conceptual_extraction.py @@ -0,0 +1 @@ +# Conceptual Extraction.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/cross_referencing.py b/backend/digs_engine/digest_paths/cross_referencing.py new file mode 100644 index 0000000000000000000000000000000000000000..70fa79b97b84cc2392acafa62659e25241b1d487 --- /dev/null +++ b/backend/digs_engine/digest_paths/cross_referencing.py @@ -0,0 +1 @@ +# Cross Referencing.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/data_analysis.py b/backend/digs_engine/digest_paths/data_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..091117b628fee643d9b4a540795375ce9e2f77b3 --- /dev/null +++ b/backend/digs_engine/digest_paths/data_analysis.py @@ -0,0 +1 @@ +# Data Analysis.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/literal_summary.py b/backend/digs_engine/digest_paths/literal_summary.py new file mode 100644 index 0000000000000000000000000000000000000000..13b1ab04724ab2ddcbafc30e706a00cad2abdbfa --- /dev/null +++ b/backend/digs_engine/digest_paths/literal_summary.py @@ -0,0 +1 @@ +# Literal Summary.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/practical_application.py b/backend/digs_engine/digest_paths/practical_application.py new file mode 100644 index 0000000000000000000000000000000000000000..5be069ae53563956cb6c472bf282b5109152cd05 --- /dev/null +++ b/backend/digs_engine/digest_paths/practical_application.py @@ -0,0 +1 @@ +# Practical Application.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/structural_mapping.py b/backend/digs_engine/digest_paths/structural_mapping.py new file mode 100644 index 0000000000000000000000000000000000000000..6338fa6b3b8b61b6c150095a2b99355942cd1572 --- /dev/null +++ b/backend/digs_engine/digest_paths/structural_mapping.py @@ -0,0 +1 @@ +# Structural Mapping.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_paths/terminology_indexing.py b/backend/digs_engine/digest_paths/terminology_indexing.py new file mode 100644 index 0000000000000000000000000000000000000000..d679ccea2366dbcb8eee4243c46e34011d4865d4 --- /dev/null +++ b/backend/digs_engine/digest_paths/terminology_indexing.py @@ -0,0 +1 @@ +# Terminology Indexing.Py path processor \ No newline at end of file diff --git a/backend/digs_engine/digest_segment.py b/backend/digs_engine/digest_segment.py new file mode 100644 index 0000000000000000000000000000000000000000..966c333fc76ed4be5a257bb9735c71345c6bd27b --- /dev/null +++ b/backend/digs_engine/digest_segment.py @@ -0,0 +1 @@ +# Splits large docs into 2000-char segments \ No newline at end of file diff --git a/backend/digs_engine/export_to_spreadsheet.py b/backend/digs_engine/export_to_spreadsheet.py new file mode 100644 index 0000000000000000000000000000000000000000..a33658e0940f2105cac8b045ab7fb211005753fb --- /dev/null +++ b/backend/digs_engine/export_to_spreadsheet.py @@ -0,0 +1 @@ +# Converts DIGS output JSON to CSV \ No newline at end of file diff --git a/backend/digs_engine/run_digs.py b/backend/digs_engine/run_digs.py new file mode 100644 index 0000000000000000000000000000000000000000..3b9441d0e752401f4c9341e4f6f5778846693aec --- /dev/null +++ b/backend/digs_engine/run_digs.py @@ -0,0 +1 @@ +# Runs 8-path DIGS on each segment \ No newline at end of file diff --git a/backend/do_agentic.tf b/backend/do_agentic.tf new file mode 100644 index 0000000000000000000000000000000000000000..8e5bdc4fa8b101d28677959f4ea9dfdc14a1739e --- /dev/null +++ b/backend/do_agentic.tf @@ -0,0 +1,18 @@ +resource "digitalocean_kubernetes_cluster" "agentic" { + name = "agentic-cluster" + region = "nyc1" + version = "1.29.0-do.0" + node_pool { + name = "agentic-nodes" + size = "s-2vcpu-4gb" + node_count = 3 + } +} + +resource "helm_release" "agentic" { + name = "agentic" + repository = "./charts/agentic" + chart = "agentic-deployment" + namespace = "agentic" + depends_on = [digitalocean_kubernetes_cluster.agentic] +} diff --git a/backend/do_deploy.sh b/backend/do_deploy.sh new file mode 100644 index 0000000000000000000000000000000000000000..fd78d3a3bc0104d17d439a2d3b98ed2e2ad96ffa --- /dev/null +++ b/backend/do_deploy.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +apt update && apt upgrade -y +apt install -y docker.io git python3-pip + +ufw allow 22/tcp +ufw allow 8080/tcp +ufw --force enable + +systemctl enable --now docker +usermod -aG docker $USER + +git clone https://github.com/your-repo/agentic-deployment.git +cd agentic-deployment + +docker build -t agentic . +docker run -d --name agentic -p 8080:8080 -v $PWD/config:/app/config --restart unless-stopped agentic + +(crontab -l 2>/dev/null; echo "0 3 * * * /usr/bin/docker exec agentic python backup.py") | crontab - diff --git a/backend/oauth_config.json b/backend/oauth_config.json new file mode 100644 index 0000000000000000000000000000000000000000..497614d428730db12b730a5b8611993a3cd3f6f7 --- /dev/null +++ b/backend/oauth_config.json @@ -0,0 +1,14 @@ +{ + "ExplorerBot": { + "twitter": { + "client_id": "1234567890", + "scope": "read,write", + "status": "authorized" + }, + "notion": { + "client_id": "abcde12345", + "scope": "read:databases", + "status": "unauthorized" + } + } +} \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..280f28f6b2cbfe20a1106ad7aa88b8e556deb030 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,10 @@ +fastapi +requests +pandas +numpy +fpdf +webdav3 +kubernetes +pyyaml +stripe +stable-baselines3 diff --git a/backend/routes/discord_auth.py b/backend/routes/discord_auth.py new file mode 100644 index 0000000000000000000000000000000000000000..6212c856b11557cd1c0ccd557d0b3b9ffbeac1fc --- /dev/null +++ b/backend/routes/discord_auth.py @@ -0,0 +1,50 @@ +from fastapi import APIRouter, Request +from fastapi.responses import RedirectResponse +import os, json, httpx + +router = APIRouter() +CREDENTIALS_PATH = os.path.join(os.path.dirname(__file__), "../data/user_credentials.json") + +DISCORD_CLIENT_ID = os.getenv("DISCORD_CLIENT_ID") +DISCORD_CLIENT_SECRET = os.getenv("DISCORD_CLIENT_SECRET") +DISCORD_REDIRECT_URI = os.getenv("DISCORD_REDIRECT_URI", "http://localhost:7860/auth/discord/callback") +auth_base = "https://discord.com/api/oauth2" + +@router.get("/auth/discord") +async def discord_login(): + scopes = "identify email guilds.join" + return RedirectResponse( + url=f"{auth_base}/authorize?client_id={DISCORD_CLIENT_ID}&redirect_uri={DISCORD_REDIRECT_URI}&response_type=code&scope={scopes}" + ) + +@router.get("/auth/discord/callback") +async def discord_callback(request: Request): + code = request.query_params.get("code") + token_url = f"{auth_base}/token" + + data = { + "client_id": DISCORD_CLIENT_ID, + "client_secret": DISCORD_CLIENT_SECRET, + "grant_type": "authorization_code", + "code": code, + "redirect_uri": DISCORD_REDIRECT_URI, + "scope": "identify email guilds.join" + } + + headers = {"Content-Type": "application/x-www-form-urlencoded"} + + async with httpx.AsyncClient() as client: + resp = await client.post(token_url, data=data, headers=headers) + token_data = resp.json() + + try: + with open(CREDENTIALS_PATH, "r") as f: + creds = json.load(f) + except: + creds = {} + + creds["discord"] = token_data + with open(CREDENTIALS_PATH, "w") as f: + json.dump(creds, f) + + return RedirectResponse(url="/frontend/index.html") \ No newline at end of file diff --git a/backend/routes/dork_search.py b/backend/routes/dork_search.py new file mode 100644 index 0000000000000000000000000000000000000000..bbde9029eff90f99cadbbe6bb6fe1293ad435524 --- /dev/null +++ b/backend/routes/dork_search.py @@ -0,0 +1,12 @@ +from fastapi import APIRouter, Query +import httpx + +router = APIRouter() + +@router.get("/search/dork") +async def google_dork(q: str = Query(...)): + search_url = f"https://www.google.com/search?q={q}" + headers = {"User-Agent": "Mozilla/5.0"} + async with httpx.AsyncClient() as client: + resp = await client.get(search_url, headers=headers) + return {"status": resp.status_code, "raw_html": resp.text[:1000]} \ No newline at end of file diff --git a/backend/routes/exploitdb_lookup.py b/backend/routes/exploitdb_lookup.py new file mode 100644 index 0000000000000000000000000000000000000000..051b8f6bed81e68720cb1922252b8f15a717eddf --- /dev/null +++ b/backend/routes/exploitdb_lookup.py @@ -0,0 +1,23 @@ +from fastapi import APIRouter +import httpx +from bs4 import BeautifulSoup + +router = APIRouter() + +@router.get("/lookup/exploitdb") +async def exploitdb_feed(): + url = "https://www.exploit-db.com/google-hacking-database" + async with httpx.AsyncClient() as client: + resp = await client.get(url) + soup = BeautifulSoup(resp.text, "html.parser") + rows = soup.select("table tbody tr") + data = [] + for row in rows[:10]: + cols = row.find_all("td") + if len(cols) >= 3: + entry = { + "dork": cols[1].text.strip(), + "description": cols[2].text.strip() + } + data.append(entry) + return {"entries": data} \ No newline at end of file diff --git a/backend/routes/github_auth.py b/backend/routes/github_auth.py new file mode 100644 index 0000000000000000000000000000000000000000..4eef2e1494e6fdeb1462303c645b72f1e2cfe385 --- /dev/null +++ b/backend/routes/github_auth.py @@ -0,0 +1,44 @@ +from fastapi import APIRouter, Request +from fastapi.responses import RedirectResponse +import os, json, httpx + +router = APIRouter() +CREDENTIALS_PATH = os.path.join(os.path.dirname(__file__), "../data/user_credentials.json") + +GITHUB_CLIENT_ID = os.getenv("GITHUB_CLIENT_ID") +GITHUB_CLIENT_SECRET = os.getenv("GITHUB_CLIENT_SECRET") +GITHUB_REDIRECT_URI = os.getenv("GITHUB_REDIRECT_URI", "http://localhost:7860/auth/github/callback") + +@router.get("/auth/github") +async def github_login(): + return RedirectResponse( + url=f"https://github.com/login/oauth/authorize?client_id={GITHUB_CLIENT_ID}&redirect_uri={GITHUB_REDIRECT_URI}&scope=repo%20read:user" + ) + +@router.get("/auth/github/callback") +async def github_callback(request: Request): + code = request.query_params.get("code") + + async with httpx.AsyncClient() as client: + resp = await client.post("https://github.com/login/oauth/access_token", + data={ + "client_id": GITHUB_CLIENT_ID, + "client_secret": GITHUB_CLIENT_SECRET, + "code": code, + "redirect_uri": GITHUB_REDIRECT_URI + }, + headers={"Accept": "application/json"} + ) + token_data = resp.json() + + try: + with open(CREDENTIALS_PATH, "r") as f: + creds = json.load(f) + except: + creds = {} + + creds["github"] = token_data + with open(CREDENTIALS_PATH, "w") as f: + json.dump(creds, f) + + return RedirectResponse(url="/frontend/index.html") \ No newline at end of file diff --git a/backend/routes/google_auth.py b/backend/routes/google_auth.py new file mode 100644 index 0000000000000000000000000000000000000000..c18b99a2398c967a0701f20c21fccd88555317a4 --- /dev/null +++ b/backend/routes/google_auth.py @@ -0,0 +1,49 @@ + +from fastapi import APIRouter, Request +from fastapi.responses import RedirectResponse +from authlib.integrations.starlette_client import OAuth +import os, json + +router = APIRouter() + +oauth = OAuth() +oauth.register( + name='google', + client_id=os.getenv("GOOGLE_CLIENT_ID"), + client_secret=os.getenv("GOOGLE_CLIENT_SECRET"), + access_token_url='https://oauth2.googleapis.com/token', + access_token_params=None, + authorize_url='https://accounts.google.com/o/oauth2/v2/auth', + authorize_params=None, + api_base_url='https://www.googleapis.com/oauth2/v1/', + client_kwargs={ + 'scope': 'openid email profile https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/documents https://www.googleapis.com/auth/calendar', + 'prompt': 'consent' + } +) + +CREDENTIALS_PATH = os.path.join(os.path.dirname(__file__), "../data/user_credentials.json") + +@router.get("/auth/google") +async def login(request: Request): + redirect_uri = request.url_for('auth_callback') + return await oauth.google.authorize_redirect(request, redirect_uri) + +@router.get("/auth/google/callback") +async def auth_callback(request: Request): + token = await oauth.google.authorize_access_token(request) + user = await oauth.google.parse_id_token(request, token) + + # Load or create credential store + try: + with open(CREDENTIALS_PATH, "r") as f: + creds = json.load(f) + except: + creds = {} + + creds["google"] = token + + with open(CREDENTIALS_PATH, "w") as f: + json.dump(creds, f) + + return RedirectResponse(url="/frontend/index.html") diff --git a/backend/routes/huggingface_auth.py b/backend/routes/huggingface_auth.py new file mode 100644 index 0000000000000000000000000000000000000000..a5db4f87582fcac85456e437a14d3988c6c3f8e0 --- /dev/null +++ b/backend/routes/huggingface_auth.py @@ -0,0 +1,17 @@ +from fastapi import APIRouter +import os, json + +router = APIRouter() +CREDENTIALS_PATH = os.path.join(os.path.dirname(__file__), "../data/user_credentials.json") + +@router.post("/auth/huggingface") +def store_hf_pat(token: str): + try: + with open(CREDENTIALS_PATH, "r") as f: + creds = json.load(f) + except: + creds = {} + creds["huggingface"] = {"token": token} + with open(CREDENTIALS_PATH, "w") as f: + json.dump(creds, f) + return {"message": "Hugging Face token saved."} \ No newline at end of file diff --git a/backend/routes/mindmap_api.py b/backend/routes/mindmap_api.py new file mode 100644 index 0000000000000000000000000000000000000000..f70f754562bd78f33fdfd91c080830bb28f1cfbb --- /dev/null +++ b/backend/routes/mindmap_api.py @@ -0,0 +1,22 @@ +from fastapi import APIRouter +import pandas as pd +import os + +router = APIRouter() +DATA_PATH = os.path.join(os.path.dirname(__file__), "../data/neurocircuit_board.csv") + +@router.get("/api/agents/mindmap") +def get_agent_mindmap(): + if not os.path.exists(DATA_PATH): + return {"name": "Agentic Core", "children": []} + + df = pd.read_csv(DATA_PATH) + children = [] + for _, row in df.iterrows(): + children.append({ + "name": row.get("AgentID", "Unknown Agent"), + "tier": row.get("Tier", "Unknown"), + "entropy": row.get("Entropy", 0) + }) + + return {"name": "Agentic Core", "children": children} \ No newline at end of file diff --git a/backend/routes/neurocircuit_api.py b/backend/routes/neurocircuit_api.py new file mode 100644 index 0000000000000000000000000000000000000000..9b7aa380dafbec7c09f95c6821bb8bbb8e051bdf --- /dev/null +++ b/backend/routes/neurocircuit_api.py @@ -0,0 +1,14 @@ +from fastapi import APIRouter +import pandas as pd +import os + +router = APIRouter() +CIRCUIT_PATH = os.path.join(os.path.dirname(__file__), "../data/neurocircuit_board.csv") + +@router.get("/api/agents/neurocircuit") +def get_neurocircuit_agents(): + if not os.path.exists(CIRCUIT_PATH): + return {"agents": []} + df = pd.read_csv(CIRCUIT_PATH) + agents = df.to_dict(orient="records") + return {"agents": agents} \ No newline at end of file diff --git a/backend/routes/notion_auth.py b/backend/routes/notion_auth.py new file mode 100644 index 0000000000000000000000000000000000000000..f7a03e7637238e31665013821e6dfd16e9984f32 --- /dev/null +++ b/backend/routes/notion_auth.py @@ -0,0 +1,55 @@ + +from fastapi import APIRouter, Request +from fastapi.responses import RedirectResponse +import os, json, urllib.parse +import httpx + +router = APIRouter() + +NOTION_CLIENT_ID = os.getenv("NOTION_CLIENT_ID") +NOTION_CLIENT_SECRET = os.getenv("NOTION_CLIENT_SECRET") +NOTION_REDIRECT_URI = os.getenv("NOTION_REDIRECT_URI", "http://localhost:7860/auth/notion/callback") +NOTION_TOKEN_URL = "https://api.notion.com/v1/oauth/token" +CREDENTIALS_PATH = os.path.join(os.path.dirname(__file__), "../data/user_credentials.json") + +@router.get("/auth/notion") +async def auth_notion(): + query = urllib.parse.urlencode({ + "client_id": NOTION_CLIENT_ID, + "response_type": "code", + "owner": "user", + "redirect_uri": NOTION_REDIRECT_URI + }) + return RedirectResponse(url=f"https://api.notion.com/v1/oauth/authorize?{query}") + +@router.get("/auth/notion/callback") +async def auth_callback(request: Request): + code = request.query_params.get("code") + if not code: + return {"error": "No code returned from Notion."} + + async with httpx.AsyncClient() as client: + resp = await client.post( + NOTION_TOKEN_URL, + auth=(NOTION_CLIENT_ID, NOTION_CLIENT_SECRET), + data={ + "grant_type": "authorization_code", + "code": code, + "redirect_uri": NOTION_REDIRECT_URI + }, + headers={"Content-Type": "application/x-www-form-urlencoded"} + ) + token_data = resp.json() + + try: + with open(CREDENTIALS_PATH, "r") as f: + creds = json.load(f) + except: + creds = {} + + creds["notion"] = token_data + + with open(CREDENTIALS_PATH, "w") as f: + json.dump(creds, f) + + return RedirectResponse(url="/frontend/index.html") diff --git a/backend/routes/reddit_auth.py b/backend/routes/reddit_auth.py new file mode 100644 index 0000000000000000000000000000000000000000..28892e2f094b56426d56c00b6a9823f94a9abece --- /dev/null +++ b/backend/routes/reddit_auth.py @@ -0,0 +1,49 @@ +from fastapi import APIRouter, Request +from fastapi.responses import RedirectResponse +import os, json, httpx, urllib.parse + +router = APIRouter() +CREDENTIALS_PATH = os.path.join(os.path.dirname(__file__), "../data/user_credentials.json") + +CLIENT_ID = os.getenv("REDDIT_CLIENT_ID") +CLIENT_SECRET = os.getenv("REDDIT_CLIENT_SECRET") +REDIRECT_URI = os.getenv("REDDIT_REDIRECT_URI", "http://localhost:7860/auth/reddit/callback") + +@router.get("/auth/reddit") +async def reddit_login(): + state = "agentix_reddit" + query = urllib.parse.urlencode({ + "client_id": CLIENT_ID, + "response_type": "code", + "state": state, + "redirect_uri": REDIRECT_URI, + "duration": "permanent", + "scope": "identity read submit vote" + }) + return RedirectResponse(url=f"https://www.reddit.com/api/v1/authorize?{query}") + +@router.get("/auth/reddit/callback") +async def reddit_callback(request: Request): + code = request.query_params.get("code") + async with httpx.AsyncClient() as client: + auth = httpx.BasicAuth(CLIENT_ID, CLIENT_SECRET) + headers = {"User-Agent": "agentix/0.1"} + data = { + "grant_type": "authorization_code", + "code": code, + "redirect_uri": REDIRECT_URI + } + response = await client.post("https://www.reddit.com/api/v1/access_token", auth=auth, data=data, headers=headers) + token_data = response.json() + + try: + with open(CREDENTIALS_PATH, "r") as f: + creds = json.load(f) + except: + creds = {} + + creds["reddit"] = token_data + with open(CREDENTIALS_PATH, "w") as f: + json.dump(creds, f) + + return RedirectResponse(url="/frontend/index.html") \ No newline at end of file diff --git a/backend/routes/spreadsheet_intake.py b/backend/routes/spreadsheet_intake.py new file mode 100644 index 0000000000000000000000000000000000000000..931a8950e5f6d025c418368c9aa1b38e6a18d3c8 --- /dev/null +++ b/backend/routes/spreadsheet_intake.py @@ -0,0 +1,31 @@ +from fastapi import APIRouter, UploadFile, File +import pandas as pd +import os, json +from backend.routes.generate_segment_trait_mappings import process_traits +from backend.routes.execution_engine import execute_agent_logic + +router = APIRouter() + +NEUROCIRCUIT_PATH = os.path.join(os.path.dirname(__file__), "../data/neurocircuit_board.csv") +FATIGUE_PATH = os.path.join(os.path.dirname(__file__), "../data/fatigue_config.yaml") + +@router.post("/agent/intake/spreadsheet") +async def upload_agent_spreadsheet(file: UploadFile = File(...)): + ext = file.filename.split(".")[-1] + df = pd.read_csv(file.file) if ext == "csv" else pd.read_excel(file.file) + + # Trait Processing + agent_traits = process_traits(df) + + # Logic Execution + enriched_agents = execute_agent_logic(agent_traits) + + # Save neurocircuit + pd.DataFrame(enriched_agents).to_csv(NEUROCIRCUIT_PATH, index=False) + + # Fatigue logic (placeholder) + fatigue = {"status": "fresh", "agents": len(enriched_agents)} + with open(FATIGUE_PATH, "w") as f: + f.write(json.dumps(fatigue, indent=2)) + + return {"status": "loaded", "agents": len(enriched_agents)} \ No newline at end of file diff --git a/backend/routes/wayback_lookup.py b/backend/routes/wayback_lookup.py new file mode 100644 index 0000000000000000000000000000000000000000..ac4a114bf07341df1d95441074511ec29c914667 --- /dev/null +++ b/backend/routes/wayback_lookup.py @@ -0,0 +1,11 @@ +from fastapi import APIRouter +import httpx + +router = APIRouter() + +@router.get("/lookup/wayback") +async def wayback_snapshots(url: str): + api_url = f"http://archive.org/wayback/available?url={url}" + async with httpx.AsyncClient() as client: + resp = await client.get(api_url) + return resp.json() \ No newline at end of file diff --git a/backend/scripts/EmotionEngine.py b/backend/scripts/EmotionEngine.py new file mode 100644 index 0000000000000000000000000000000000000000..efa22a105d611219f41f37bb387f72cffb357199 --- /dev/null +++ b/backend/scripts/EmotionEngine.py @@ -0,0 +1 @@ +# Emotion processing module placeholder \ No newline at end of file diff --git a/backend/scripts/EvolutionTracker.py b/backend/scripts/EvolutionTracker.py new file mode 100644 index 0000000000000000000000000000000000000000..7ba0fc2db1ea764702538280a4b1f01350d2bd05 --- /dev/null +++ b/backend/scripts/EvolutionTracker.py @@ -0,0 +1 @@ +# Evolution history logger placeholder \ No newline at end of file diff --git a/backend/scripts/SelfNarrator.py b/backend/scripts/SelfNarrator.py new file mode 100644 index 0000000000000000000000000000000000000000..ed3f71cc6c5530b3b76561364821d04e8dc34c76 --- /dev/null +++ b/backend/scripts/SelfNarrator.py @@ -0,0 +1 @@ +# Self-narration engine placeholder \ No newline at end of file diff --git a/backend/scripts/check_bias.py b/backend/scripts/check_bias.py new file mode 100644 index 0000000000000000000000000000000000000000..4ba6b4cb7fc8c1509fb79d5e06b9feda8eb21183 --- /dev/null +++ b/backend/scripts/check_bias.py @@ -0,0 +1 @@ +# Fairness audit script using SHAP \ No newline at end of file diff --git a/backend/scripts/check_licenses.py b/backend/scripts/check_licenses.py new file mode 100644 index 0000000000000000000000000000000000000000..6b35d66ffc8deb16cdbb5e0050b9ee062aa508e5 --- /dev/null +++ b/backend/scripts/check_licenses.py @@ -0,0 +1 @@ +# Validates open-source licenses \ No newline at end of file diff --git a/backend/scripts/deploy_from_manifest.py b/backend/scripts/deploy_from_manifest.py new file mode 100644 index 0000000000000000000000000000000000000000..7fd6fbf07fa04f88f904fe2389ed006d075275ce --- /dev/null +++ b/backend/scripts/deploy_from_manifest.py @@ -0,0 +1,24 @@ +import csv +from core.supervisor import Supervisor +from core.agents.base_agent import Agent + +supervisor = Supervisor() + +def parse_condition(expr): + field, op_val = expr.split(">", 1) + field = field.strip() + val = float(op_val.strip('% ')) + return lambda metrics: metrics.get(field, 0) > val + +def load_agents_from_csv(csv_path="master_plan.csv"): + with open(csv_path) as f: + reader = csv.DictReader(f) + for row in reader: + agent = Agent( + id=row['agent_id'], + role=row['role'], + target_env=row['target_env'], + dependencies=row['dependencies'].split(';'), + trigger=parse_condition(row['trigger_condition']) + ) + supervisor.register_agent(agent) \ No newline at end of file diff --git a/backend/scripts/dynamic_pricing.py b/backend/scripts/dynamic_pricing.py new file mode 100644 index 0000000000000000000000000000000000000000..259c48beca52c70039defad9fca49c6e4ff4ff75 --- /dev/null +++ b/backend/scripts/dynamic_pricing.py @@ -0,0 +1,17 @@ +import numpy as np + +class PricingEngine: + def __init__(self, base_price=99): + self.base = base_price + self.demand_factor = 1.0 + + def update_demand(self, api_calls_last_hour): + self.demand_factor = 1 + (2 / (1 + np.exp(-0.001 * api_calls_last_hour))) + + def get_price(self, tier): + tiers = { + "basic": self.base, + "pro": self.base * 5, + "enterprise": self.base * 20 + } + return tiers[tier] * self.demand_factor diff --git a/backend/scripts/execution_engine.py b/backend/scripts/execution_engine.py new file mode 100644 index 0000000000000000000000000000000000000000..82ea93e79b7fbb52611595c3825c4417134e5910 --- /dev/null +++ b/backend/scripts/execution_engine.py @@ -0,0 +1,25 @@ + +import json + +class AgentExecutionEngine: + def __init__(self, agent): + self.agent = agent + + def execute(self, env_input: dict): + decision = self.agent.decide_behavior(env_input) + result = { + "agent_id": self.agent.agent_id, + "input": env_input, + "decision": decision, + "log_entry": self._log_to_memory(env_input, decision) + } + return result + + def _log_to_memory(self, input_data, decision): + memory_path = f"memory/{self.agent.agent_id}_memory.csv" + try: + with open(memory_path, "a") as f: + f.write(f"{json.dumps(input_data)},{json.dumps(decision)}\n") + return f"Memory updated: {memory_path}" + except Exception as e: + return f"Memory log failed: {str(e)}" diff --git a/backend/scripts/export_shared_memory.py b/backend/scripts/export_shared_memory.py new file mode 100644 index 0000000000000000000000000000000000000000..2a7bfdc6cb102e0a775f45ae2702c096bd637ef0 --- /dev/null +++ b/backend/scripts/export_shared_memory.py @@ -0,0 +1,12 @@ +import csv + +def export_consensus(debates, path="shared_memory/consensus_output.csv"): + with open(path, "w", newline="") as csvfile: + writer = csv.DictWriter(csvfile, fieldnames=["agent", "claim", "status"]) + writer.writeheader() + for row in debates: + writer.writerow({ + "agent": row["agent"], + "claim": row["claim"], + "status": row["status"] + }) diff --git a/backend/scripts/feedback_loop.py b/backend/scripts/feedback_loop.py new file mode 100644 index 0000000000000000000000000000000000000000..3fce55abac9897f0ea10864e009df57581b57282 --- /dev/null +++ b/backend/scripts/feedback_loop.py @@ -0,0 +1,23 @@ +class FeedbackCollector: + def __init__(self): + self.feedback_db = {} + + def add_feedback(self, agent_id, feedback_data): + if agent_id not in self.feedback_db: + self.feedback_db[agent_id] = [] + self.feedback_db[agent_id].append(feedback_data) + + def get_all_feedback(self): + return self.feedback_db + + +class RefinementEngine: + def __init__(self, feedback_collector): + self.collector = feedback_collector + + def trigger_analysis(self): + for agent_id, feedback_list in self.collector.get_all_feedback().items(): + self._analyze(agent_id, feedback_list) + + def _analyze(self, agent_id, feedback_list): + print(f"[Refinement] Analyzing feedback for agent: {agent_id}") \ No newline at end of file diff --git a/backend/scripts/generate_cert.py b/backend/scripts/generate_cert.py new file mode 100644 index 0000000000000000000000000000000000000000..c4feca1e78b74bb642ec5cc6153961b9ac65e098 --- /dev/null +++ b/backend/scripts/generate_cert.py @@ -0,0 +1,40 @@ +from fpdf import FPDF +import pandas as pd + +class ComplianceCert: + def __init__(self, csv_path): + self.df = pd.read_csv(csv_path) + + def _format_risk(self, trend): + return { + "↑": ("HIGH", (255,0,0)), + "→": ("MEDIUM", (255,165,0)), + "↓": ("LOW", (0,128,0)) + }.get(trend, ("UNKNOWN", (0,0,0))) + + def generate_pdf(self, output_path="compliance_cert.pdf"): + pdf = FPDF() + pdf.add_page() + pdf.set_font("Arial", 'B', 16) + pdf.cell(0, 10, "Agentic AI Deployment Compliance Certificate", ln=1, align='C') + pdf.set_font("Arial", size=10) + col_widths = [40, 30, 30, 30, 40] + headers = ["Component", "Risk Trend", "Last Audit", "Automation", "Compliance"] + for i, header in enumerate(headers): + pdf.cell(col_widths[i], 10, header, border=1) + pdf.ln() + for _, row in self.df.iterrows(): + risk_text, risk_color = self._format_risk(row['Predicted_Risk_Trend']) + pdf.cell(col_widths[0], 10, row['Component'], border=1) + pdf.set_text_color(*risk_color) + pdf.cell(col_widths[1], 10, risk_text, border=1) + pdf.set_text_color(0,0,0) + pdf.cell(col_widths[2], 10, str(row['Last_Audit_Date']), border=1) + pdf.cell(col_widths[3], 10, f"Level {row['Automation_Level']}", border=1) + pdf.cell(col_widths[4], 10, row['Compliance_Frameworks'].split(',')[0], border=1) + pdf.ln() + pdf.output(output_path) + +if __name__ == "__main__": + cert = ComplianceCert("master_plan_v3.2.csv") + cert.generate_pdf() diff --git a/backend/scripts/log_processor.py b/backend/scripts/log_processor.py new file mode 100644 index 0000000000000000000000000000000000000000..ad04847a0c04e17d923b341e64943da1fde77a58 --- /dev/null +++ b/backend/scripts/log_processor.py @@ -0,0 +1,12 @@ +import json +from hashlib import sha256 +from datetime import datetime + +def log_audit(event): + with open("audit.log", "a") as f: + entry = { + "timestamp": datetime.utcnow().isoformat(), + "event": event, + "hash": sha256(json.dumps(event).encode()).hexdigest() + } + f.write(json.dumps(entry) + "\n") diff --git a/backend/scripts/main.py b/backend/scripts/main.py new file mode 100644 index 0000000000000000000000000000000000000000..aa0f0e42705e28975cb3b71c22200f4bbf1572e8 --- /dev/null +++ b/backend/scripts/main.py @@ -0,0 +1,15 @@ +from fastapi import FastAPI, HTTPException +app = FastAPI() + +LICENSE_KEYS = { + "abc-basic": "basic", + "xyz-pro": "pro", + "ent-999": "enterprise" +} + +@app.post("/validate") +def validate_license(data: dict): + key = data.get("key") + if key not in LICENSE_KEYS: + raise HTTPException(status_code=403, detail="Invalid license key") + return {"tier": LICENSE_KEYS[key]} diff --git a/backend/scripts/multiplexing_engine.py b/backend/scripts/multiplexing_engine.py new file mode 100644 index 0000000000000000000000000000000000000000..055de6210d4a8106faf41d9c2ac351ffac1ced5e --- /dev/null +++ b/backend/scripts/multiplexing_engine.py @@ -0,0 +1,71 @@ +import importlib +import json +import logging +import pandas as pd +from typing import Dict, Any +from feedback.loop_manager import LoopManager + +class MultiplexingEngine: + def __init__(self, matrix_path: str): + self.matrix = pd.read_csv(matrix_path) + self.agents = {} + self.logger = logging.getLogger("MultiplexingEngine") + self.loop_enabled = True + self._validate_matrix() + + def _validate_matrix(self): + required_columns = {'agent_id', 'role', 'activation_logic', 'config', 'behavior'} + missing = required_columns - set(self.matrix.columns) + if missing: + raise ValueError(f"Missing required columns: {missing}") + + def _parse_json_field(self, field: str) -> Dict[str, Any]: + try: + return json.loads(field.replace("'", '"')) + except json.JSONDecodeError: + return {} + + def _parse_behavior(self, behavior_str: str) -> Dict[str, Any]: + return self._parse_json_field(behavior_str) + + def _parse_security(self, security_str: str) -> Dict[str, Any]: + return self._parse_json_field(security_str) + + def _load_agent_class(self, role: str): + try: + module = importlib.import_module(f"agents.{role.lower()}") + return getattr(module, role) + except Exception as e: + self.logger.error(f"Agent class load failed: {str(e)}") + return None + + def dispatch_tasks(self): + for _, row in self.matrix.iterrows(): + agent_id = row["agent_id"] + role = row["role"] + config = self._parse_json_field(row.get("config", "{}")) + behavior = self._parse_behavior(row.get("behavior", "{}")) + security = self._parse_security(row.get("security", "{}")) + activation_logic = row.get("activation_logic", "lambda metrics: True") + + try: + if eval(activation_logic)({}): # pass empty context for now + AgentCls = self._load_agent_class(role) + if AgentCls: + agent_instance = AgentCls(**config) + if self.loop_enabled: + loop = LoopManager(agent_id) + result = loop.run_loop(f"Execute task for {agent_id}") + else: + result = agent_instance.execute(config=config, behavior=behavior) + print(f"{agent_id} executed: {result['output']}") + except Exception as e: + self.logger.error(f"Dispatch failed for {agent_id}: {str(e)}") + + def process_feedback(self, agent_id: str, feedback_data: Dict[str, Any]): + try: + loop = LoopManager(agent_id) + result = loop.run_loop(feedback_data.get("task_input", "No input")) + print(f"[Feedback] Loop complete for {agent_id}: {result['output']}") + except Exception as e: + self.logger.error(f"Feedback processing failed for {agent_id}: {str(e)}") \ No newline at end of file diff --git a/backend/scripts/simulation.py b/backend/scripts/simulation.py new file mode 100644 index 0000000000000000000000000000000000000000..ee7ae85ed3c1d4233cda7cfd1ef8ec280d6467fa --- /dev/null +++ b/backend/scripts/simulation.py @@ -0,0 +1,11 @@ +from agent_forum import AgentForum + +forum = AgentForum() + +# Simulate agents submitting claims +forum.submit_argument("1001-2504-0034-6890", "Dorsal stream improves robotic arm precision", "Supported by neurocircuit data") +forum.submit_argument("3003-4506-2036-8892", "Visual memory loss impacts grip timing", "Observed delay in Segment_37") + +resolved = forum.resolve_debates() +for r in resolved: + print(f"{r['agent']} | {r['claim']} | Status: {r['status']}") diff --git a/backend/scripts/stripe_integration.py b/backend/scripts/stripe_integration.py new file mode 100644 index 0000000000000000000000000000000000000000..d6b09ae2e73dd623b55146bc4ed57bcc8bd3b6dd --- /dev/null +++ b/backend/scripts/stripe_integration.py @@ -0,0 +1,34 @@ +import stripe +import os +from datetime import datetime + +stripe.api_key = os.getenv("STRIPE_KEY") + +class BillingEngine: + def __init__(self): + self.plans = { + "basic": "price_1P...", + "pro": "price_1P...", + "enterprise": "price_1P..." + } + + def create_subscription(self, email, tier, metadata={}): + customer = stripe.Customer.create(email=email) + sub = stripe.Subscription.create( + customer=customer.id, + items=[{"price": self.plans[tier]}], + metadata={ + **metadata, + "deployment_id": "agentic_v5", + "start_date": datetime.now().isoformat() + } + ) + return sub.id + + def usage_webhook(self, event): + if event["type"] == "agent.runtime_minutes": + stripe.SubscriptionItem.create_usage_record( + event["subscription_item"], + quantity=event["minutes"], + timestamp=int(datetime.now().timestamp()) + ) diff --git a/backend/scripts/sync_script.py b/backend/scripts/sync_script.py new file mode 100644 index 0000000000000000000000000000000000000000..5a4a006b90fa8a9bb9fce75bb8d8006a381836fd --- /dev/null +++ b/backend/scripts/sync_script.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +import pandas as pd +import hashlib +from webdav3.client import Client +from datetime import datetime + +# Nextcloud WebDAV config +WEBDAV_CONFIG = { + 'webdav_hostname': "https://your-nextcloud.com/remote.php/dav/files/USERNAME/", + 'webdav_login': "username", + 'webdav_password': "password", + 'webdav_root': "/agentic_deployment/tables/" +} + +def calculate_diff(current_df, new_df): + """Identify added/modified rows using MD5 hashes of row data""" + current_df['hash'] = current_df.apply(lambda x: hashlib.md5(x.to_string().encode()).hexdigest(), axis=1) + new_df['hash'] = new_df.apply(lambda x: hashlib.md5(x.to_string().encode()).hexdigest(), axis=1) + + merged = pd.merge(current_df, new_df, on='hash', how='outer', indicator=True) + changes = merged[merged['_merge'] != 'both'] + return changes + +def sync_with_nextcloud(): + client = Client(WEBDAV_CONFIG) + local_path = "master_plan_v3.2.csv" + remote_path = "master_plan_v3.2.csv" + + # Download current version + client.download_file(remote_path, local_path) + current_df = pd.read_csv(local_path) + + # Get new edits (simulated - in practice would watch filesystem/API) + new_df = pd.read_csv("local_edits.csv") + + # Calculate & apply changes + diff = calculate_diff(current_df, new_df) + if not diff.empty: + updated_df = pd.concat([current_df, diff], ignore_index=True).drop_duplicates(subset='hash', keep='last') + updated_df.to_csv(local_path, index=False) + client.upload_file(local_path, remote_path) + log_change(diff.shape[0]) + return diff.shape[0] + +def log_change(num_updates): + with open("sync_log.txt", "a") as f: + f.write(f"{datetime.now()}: Synced {num_updates} changes\n") + +if __name__ == "__main__": + changes_made = sync_with_nextcloud() + print(f"Sync complete. {changes_made} rows updated.") diff --git a/backend/sign_release.sh b/backend/sign_release.sh new file mode 100644 index 0000000000000000000000000000000000000000..c955a1ee176d530a136c765c3e2c2ce5f7e9fabe --- /dev/null +++ b/backend/sign_release.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# GPG-sign all release artifacts +gpg --armor --detach-sign agentic-deployment-v5.0.zip +cosign sign-blob --key cosign.key agentic-deployment-v5.0.zip diff --git a/backend/static/style.css b/backend/static/style.css new file mode 100644 index 0000000000000000000000000000000000000000..114adf441e9032febb46bc056b2a8bb651075f0d --- /dev/null +++ b/backend/static/style.css @@ -0,0 +1,28 @@ +body { + padding: 2rem; + font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif; +} + +h1 { + font-size: 16px; + margin-top: 0; +} + +p { + color: rgb(107, 114, 128); + font-size: 15px; + margin-bottom: 10px; + margin-top: 5px; +} + +.card { + max-width: 620px; + margin: 0 auto; + padding: 16px; + border: 1px solid lightgray; + border-radius: 16px; +} + +.card p:last-child { + margin-bottom: 0; +} diff --git a/backend/task_errors.json b/backend/task_errors.json new file mode 100644 index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc --- /dev/null +++ b/backend/task_errors.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/backend/task_queue.json b/backend/task_queue.json new file mode 100644 index 0000000000000000000000000000000000000000..f53d019b49c095c7e95e4c502dfb79d2c49507c8 --- /dev/null +++ b/backend/task_queue.json @@ -0,0 +1,18 @@ +[ + { + "id": "task_001", + "agent": "ExplorerBot", + "action": "run_simulation", + "params": {}, + "schedule": "2025-04-16T10:00:00", + "status": "pending" + }, + { + "id": "task_002", + "agent": "NavigatorBot", + "action": "digs_analysis", + "params": {}, + "schedule": "2025-04-17T08:30:00", + "status": "pending" + } +] \ No newline at end of file diff --git a/backend/tasks_definitions.json b/backend/tasks_definitions.json new file mode 100644 index 0000000000000000000000000000000000000000..d37b90ffd408ea8cd0c59fdafd098ea84f4229da --- /dev/null +++ b/backend/tasks_definitions.json @@ -0,0 +1,19 @@ +[ + { + "name": "run_simulation", + "description": "Run a test simulation on the agent\u2019s current configuration.", + "params": [] + }, + { + "name": "digs_analysis", + "description": "Analyze DIGS memory and return trait summary.", + "params": [] + }, + { + "name": "upload_file", + "description": "Upload a CSV to the agent\u2019s memory.", + "params": [ + "filename" + ] + } +] \ No newline at end of file diff --git a/backend/templates/admin_console_panel.html b/backend/templates/admin_console_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..3eb011b00d4b9f2acb2f19d122ff8c74b695a520 --- /dev/null +++ b/backend/templates/admin_console_panel.html @@ -0,0 +1,48 @@ + + + + diff --git a/backend/templates/agent_feedback_panel.html b/backend/templates/agent_feedback_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..b5293b36ca0110e855f4d13838a544c38b1f406b --- /dev/null +++ b/backend/templates/agent_feedback_panel.html @@ -0,0 +1,41 @@ + + + + diff --git a/backend/templates/agent_history_panel.html b/backend/templates/agent_history_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..4c9c0c9913649dab667d47b0bf54a120722927a7 --- /dev/null +++ b/backend/templates/agent_history_panel.html @@ -0,0 +1,32 @@ + + + + diff --git a/backend/templates/agent_profile_panel.html b/backend/templates/agent_profile_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..0fc877b2a8836c37e26fdafc49d075ff14db5a10 --- /dev/null +++ b/backend/templates/agent_profile_panel.html @@ -0,0 +1,29 @@ + + + + diff --git a/backend/templates/document_import_panel.html b/backend/templates/document_import_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..99f01ede407729ff016636cf300bd9a0df0dfc97 --- /dev/null +++ b/backend/templates/document_import_panel.html @@ -0,0 +1,29 @@ + + + + diff --git a/backend/templates/index.html b/backend/templates/index.html new file mode 100644 index 0000000000000000000000000000000000000000..e23beb22f615e2c58068611e7574e711010c4e87 --- /dev/null +++ b/backend/templates/index.html @@ -0,0 +1,614 @@ + + + + + + LATE - Liquidity Agentic Terraforming Environment + + + + + + +
+
+
+
+ LATE v3.2 +
+ +
+
+ +
+ + +
+
+
+ + +
+ +
+
+

Agent Modules

+
+ + +
+
+ +
+
+
+

+ Core Agents + 12 +

+
+
+
+ Orchestrator +
+
+
+ Memory Manager +
+
+
+ DIGS Processor +
+
+
+ +
+

+ API Routers + 14 +

+
+
+
+ Reddit +
+
+
+ GitHub +
+
+
+ Notion +
+
+
+ +
+

+ Memory Files + +

+
+
+ SegmentMemory.csv + 24KB +
+
+ DIGS_Cognitive.csv + 18KB +
+
+ Agentic_Deployment.csv + 32KB +
+
+
+
+
+ +
+
System Resources
+
+
+
+
+ CPU: 65% + Memory: 42% +
+
+
+ + +
+ +
+
+ + + +
+ +
+ + +
+
+ + +
+ + + +
+ +
+
+

Orchestrator

+ Core +
+
Coordinates all agent activities
+
+
+ Memory + 24KB / 32KB +
+
+
+
+
Last Task: Initiated DIGS analysis
+
Endpoints: 14 active
+
+
+
Orchestrator Details
+
Status: Active
+
Uptime: 2h 14m
+
Tasks: 42 completed
+
Load: Medium
+
+
+ + +
+
+

Memory Manager

+ Core +
+
Handles all memory operations
+
+
+ Memory + 18KB / 24KB +
+
+
+
+
Last Task: Updated SegmentMemory
+
Endpoints: 3 active
+
+
+
Memory Manager Details
+
Status: Active
+
Uptime: 2h 14m
+
Files: 6 managed
+
Load: Low
+
+
+ + +
+
+

DIGS Processor

+ Core +
+
Cognitive analysis engine
+
+
+ Memory + 28KB / 32KB +
+
+
+
+
Last Task: Conceptual extraction
+
Endpoints: 2 active
+
+
+
DIGS Processor Details
+
Status: Active
+
Uptime: 1h 47m
+
Processes: literal_summary.py
+
Load: High
+
+
+ + +
+
+

Reddit API

+ Router +
+
reddit_auth.py
+
+
+ Memory + 8KB / 16KB +
+
+
+
+
Last: Auth check
+
EP: /reddit
+
+
+ + +
+
+

GitHub API

+ Router +
+
github_auth.py
+
+
+ Memory + 12KB / 16KB +
+
+
+
+
Last: Repo scan
+
EP: /github
+
+
+
+
+ + +
+
+ + + + +
+
+
[12:04:23] INFO: FastAPI server started on port 8000
+
[12:04:25] SYSTEM: Loading memory files...
+
[12:04:26] SUCCESS: SegmentMemory.csv loaded (24KB)
+
[12:04:27] SUCCESS: DIGS_Cognitive.csv loaded (18KB)
+
[12:04:28] SYSTEM: Initializing DIGS protocols...
+
[12:04:30] WARNING: ShortTermMemory.csv not found, creating new
+
[12:04:32] SYSTEM: Activating multiplexing_engine.py
+
[12:04:35] SUCCESS: MultiplexingEngine class initialized
+
[12:04:36] SYSTEM: Mapping API routers...
+
[12:04:38] SUCCESS: 14 API endpoints registered
+
[12:04:40] SYSTEM: Ready for simulation
+
+
+
+
+ + + + + +

Made with DeepSite LogoDeepSite - 🧬 Remix

+ +
+

Upload Agentic Files

+
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+
+
+ + + + + \ No newline at end of file diff --git a/backend/templates/launch_backend_panel.html b/backend/templates/launch_backend_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..c63cfef0b064cc5df15b297d5e85a8059a123d19 --- /dev/null +++ b/backend/templates/launch_backend_panel.html @@ -0,0 +1,56 @@ + + + + diff --git a/backend/templates/memory_analysis_panel.html b/backend/templates/memory_analysis_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..7511fdfd71b9815e0dbe9539bdd77128738985e1 --- /dev/null +++ b/backend/templates/memory_analysis_panel.html @@ -0,0 +1,62 @@ + + + + diff --git a/backend/templates/oauth_console_panel.html b/backend/templates/oauth_console_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..2bf0029f0ed92b162f440349e7cf0d2f0ed8ff8b --- /dev/null +++ b/backend/templates/oauth_console_panel.html @@ -0,0 +1,46 @@ + + + + diff --git a/backend/templates/system_log_panel.html b/backend/templates/system_log_panel.html new file mode 100644 index 0000000000000000000000000000000000000000..f2940697f961958555116f190e78da3687aa87ad --- /dev/null +++ b/backend/templates/system_log_panel.html @@ -0,0 +1,46 @@ + + + + diff --git a/backend/templates/ui_panel_controller.html b/backend/templates/ui_panel_controller.html new file mode 100644 index 0000000000000000000000000000000000000000..df6038eaa24085cbeec0a5477abf5fc77a319fca --- /dev/null +++ b/backend/templates/ui_panel_controller.html @@ -0,0 +1,23 @@ + +
+ + + + + +
+ + + + + + + + diff --git a/backend/termux_deploy.sh b/backend/termux_deploy.sh new file mode 100644 index 0000000000000000000000000000000000000000..d1f57c8f14a7cdc7224ed38649b0ff02bf4923fa --- /dev/null +++ b/backend/termux_deploy.sh @@ -0,0 +1,15 @@ +#!/data/data/com.termux/files/usr/bin/bash + +pkg update -y && pkg install -y python git openssh + +git clone https://github.com/your-repo/agentic-deployment.git +cd agentic-deployment + +sed -i 's/ENABLE_K8S=.*/ENABLE_K8S=false/g' .env + +pip install -r requirements.txt --no-deps + +nohup python supervisor.py > agentic.log 2>&1 & + +apt install qrencode -y +echo "http://localhost:8080" | qrencode -t ANSIUTF8 diff --git a/backend/utils/agent_geometry.py b/backend/utils/agent_geometry.py new file mode 100644 index 0000000000000000000000000000000000000000..f4fefac65995df8a974615f3087eb2af3a0102c0 --- /dev/null +++ b/backend/utils/agent_geometry.py @@ -0,0 +1 @@ +# Assigns triangle-based Pythagorean traits \ No newline at end of file diff --git a/backend/utils/harmony_utils.py b/backend/utils/harmony_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a5adf978b4f1750b4972f6dcc1f25bb35e2abd45 --- /dev/null +++ b/backend/utils/harmony_utils.py @@ -0,0 +1 @@ +# Validates entropy balance, resonance, tiers \ No newline at end of file diff --git a/frontend/components/mindmap/index.html b/frontend/components/mindmap/index.html new file mode 100644 index 0000000000000000000000000000000000000000..fd1a30e2407e20d198191105f85216a40bac9749 --- /dev/null +++ b/frontend/components/mindmap/index.html @@ -0,0 +1,50 @@ + + + + + Agentic MindMap + + + + + + + \ No newline at end of file diff --git a/frontend/components/visualizer.css b/frontend/components/visualizer.css new file mode 100644 index 0000000000000000000000000000000000000000..1f191dc4e6935595a15bda250b8335fb2e69117d --- /dev/null +++ b/frontend/components/visualizer.css @@ -0,0 +1,28 @@ +.agent-visualizer { + padding: 1rem; + font-family: sans-serif; +} +.grid { + display: flex; + flex-wrap: wrap; + gap: 1rem; +} +.agent-card { + background: #f4f4f4; + padding: 1rem; + border-radius: 8px; + width: 220px; + box-shadow: 0 0 5px rgba(0,0,0,0.1); +} +.triangle { + display: flex; + justify-content: space-between; + font-weight: bold; +} +.vertex { + flex: 1; + text-align: center; +} +.meta p { + margin: 0.3rem 0; +} \ No newline at end of file diff --git a/frontend/components/visualizer.js b/frontend/components/visualizer.js new file mode 100644 index 0000000000000000000000000000000000000000..d1484fc193fcc2ffdba1619fcefdd8de87f9732f --- /dev/null +++ b/frontend/components/visualizer.js @@ -0,0 +1,34 @@ +import React, { useEffect, useState } from 'react'; +import './visualizer.css'; + +export default function AgentVisualizer() { + const [agents, setAgents] = useState([]); + + useEffect(() => { + fetch('/api/agents/neurocircuit') + .then(res => res.json()) + .then(data => setAgents(data.agents || [])); + }, []); + + return ( +
+

Agent Network Grid

+
+ {agents.map((agent, index) => ( +
+
+
{agent.function}
+
{agent.communication}
+
{agent.security}
+
+
+

ID: {agent.id}

+

Entropy: {agent.entropy}

+

Tier: {agent.tier}

+
+
+ ))} +
+
+ ); +} \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000000000000000000000000000000000000..e3b5f1f591eb5a37ae3a537235d188f293e0000b --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,154 @@ + + + + + + Liquidity Terraforming + + + +
+

Liquidity Terraforming

+ + + + + + + + + + + + + +
+ + + +

Agent Network

+
+ + +

Agent Network

+
+ + +
+
+ + + + \ No newline at end of file diff --git a/frontend/onboarding.html b/frontend/onboarding.html new file mode 100644 index 0000000000000000000000000000000000000000..24a9c3a446bd483319f67238a42304a4f1fdc2a4 --- /dev/null +++ b/frontend/onboarding.html @@ -0,0 +1,84 @@ + + + + + + Onboarding Wizard + + + +
+

Welcome to Agentic Terraforming Setup

+ + + + + + + + + +
+ + + + diff --git a/frontend/static/agentic_brain_background.png b/frontend/static/agentic_brain_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3e416de4d1dce170f7708271bbcf481bcaa5ccee Binary files /dev/null and b/frontend/static/agentic_brain_background.png differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..20d0a68b9a14748fccb199813cdde93ecc11f465 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +fastapi +uvicorn +requests +pandas +numpy +fpdf +webdav3 +kubernetes +pyyaml +stripe +stable-baselines3 +flask +matplotlib diff --git a/run_backend.sh b/run_backend.sh new file mode 100644 index 0000000000000000000000000000000000000000..dc0d6bdd9684edcb3ac75db36d522024147c2d81 --- /dev/null +++ b/run_backend.sh @@ -0,0 +1,10 @@ +#!/bin/bash +echo "Setting up virtual environment..." +python3 -m venv venv +source venv/bin/activate +pip install --upgrade pip +pip install -r backend/requirements.txt + +echo "Starting backend..." +# example start, user should replace with actual main file entry point +python backend/scripts/main.py diff --git a/system_settings.json b/system_settings.json new file mode 100644 index 0000000000000000000000000000000000000000..ba264828f94146803333ae9214e13dd7088fed06 --- /dev/null +++ b/system_settings.json @@ -0,0 +1,50 @@ +{ + "General": { + "default_agent": "ExplorerBot", + "data_directory": "/backend/", + "auto_save_interval": 300, + "enable_auto_backups": true, + "timezone": "UTC" + }, + "DIGS": { + "segment_size": 2000, + "enable_conflict_map": true, + "enable_structural_feedback_merge": true, + "keep_raw_uploads": false, + "cross_source_indexing": true + }, + "Agent": { + "feedback_impact_level": "medium", + "auto_trait_rebalance": true, + "default_task_prompt": "Assist user", + "enable_profile_adaptation": true, + "memory_recursion_depth": 3 + }, + "Tasks": { + "max_concurrent_tasks": 5, + "retry_failed_tasks": false, + "task_timeout_sec": 120, + "enable_journaling": true, + "live_task_prompts": false + }, + "OAuth": { + "auto_reauth_interval": 3600, + "enable_token_caching": true, + "allow_manual_config_uploads": true, + "show_connected_services_ui": true + }, + "UI": { + "startup_view": "Bots", + "theme": "Dark", + "enable_panel_animations": true, + "display_system_logs_inline": false, + "enable_drag_and_drop": true + }, + "Admin": { + "enable_full_system_export": true, + "clear_logs_on_restart": false, + "enable_recovery_mode": true, + "audit_trail_logging": true, + "error_reporting_level": "warning" + } +} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000000000000000000000000000000000000..896d03b562992b418eb98123a6d3952d34c53861 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,95 @@ + + + + + + Agentic Mind Map + + + +

Agentic Mind Map

+
+ + +
+
+ Agentic Brain + OAuth Map +
+ + + + + +