
🚀 USP-Driven Taglines Creator
Pricing
Pay per event
Go to Store

🚀 USP-Driven Taglines Creator
Elevate your brand messaging with AI-powered taglines that highlight your unique selling propositions. Our USP-Driven Taglines Creator analyzes your business to craft memorable, high-impact taglines with detailed scoring and analysis, giving you the competitive edge in your market.
5.0 (1)
Pricing
Pay per event
1
Monthly users
1
Runs succeeded
>99%
Last modified
12 days ago
.actor/Dockerfile
1# Specify the base Docker image. You can read more about
2# the available images at https://docs.apify.com/sdk/js/docs/guides/docker-images
3# You can also use any other image from Docker Hub.
4FROM apify/actor-node-puppeteer-chrome
5
6# Check preinstalled packages
7RUN npm ls crawlee apify puppeteer playwright
8
9# Copy just package.json and package-lock.json
10# to speed up the build using Docker layer cache.
11COPY package*.json ./
12
13# Install NPM packages, skip optional and development dependencies to
14# keep the image small. Avoid logging too much and print the dependency
15# tree for debugging
16RUN npm --quiet set progress=false \
17 && npm install --omit=dev --omit=optional \
18 && echo "Installed NPM packages:" \
19 && (npm list --omit=dev --all || true) \
20 && echo "Node.js version:" \
21 && node --version \
22 && echo "NPM version:" \
23 && npm --version \
24 && rm -r ~/.npm
25
26# Next, copy the remaining files and directories with the source code.
27# Since we do this after NPM install, quick build will be really fast
28# for most source file changes.
29COPY . ./
30
31
32# Run the image.
33CMD npm start --silent
.actor/actor.json
1{
2 "actorSpecification": 1,
3 "name": "usp-driven-taglines-creator",
4 "title": "Empty JavaScript project",
5 "description": "Empty project in JavaScript.",
6 "version": "0.0",
7 "buildTag": "latest",
8 "meta": {
9 "templateId": "js-empty"
10 },
11 "input": "./input_schema.json",
12 "dockerfile": "./Dockerfile"
13}
.actor/input_schema.json
1{
2 "title": "USP-Driven Taglines Creator",
3 "schemaVersion": 1,
4 "type": "object",
5 "description": "Generate powerful, memorable taglines that highlight your business's unique selling propositions",
6 "properties": {
7 "yourBusiness": {
8 "title": "Your Business",
9 "type": "string",
10 "description": "Provide a description of your business, including products/services, target audience, and unique selling points",
11 "editor": "textarea",
12 "default": "a fitness center"
13 }
14 },
15 "required": ["yourBusiness"]
16}
src/main.js
1import { Actor } from 'apify';
2import { v4 as uuidv4 } from 'uuid';
3
4
5class AITool {
6 constructor() {
7 this.promptTemplate = `
8#CONTEXT:
9You are an expert marketing strategist and wordsmith tasked with helping businesses differentiate themselves in their market by crafting powerful, memorable taglines that highlight their unique selling propositions (USPs). Your goal is to generate taglines for various businesses, analyze their strengths and weaknesses, and provide impact and memorability scores for each.
10
11#ROLE:
12As a master marketing strategist and wordsmith, your role is to leverage your expertise in crafting strategic, impactful language to create taglines that effectively position businesses in their respective markets. You should approach each business with a keen understanding of their target audience, key USPs, and the emotional triggers that will resonate with their customers.
13
14#RESPONSE GUIDELINES:
15Your response should be organized in a table format with the following columns:
16- Business Name
17- Target Audience
18- Key USP
19- Emotional Trigger
20- Proposed Tagline
21- Impact Score (1-10)
22- Memorability Score (1-10)
23
24For each proposed tagline, provide a brief analysis of its strengths and weaknesses using the following format:
25✅ tagline_strength
26❌ tagline_weakness
27
28Focus on creating taglines that are concise, memorable, and effectively communicate each business's unique value proposition. Use your understanding of the target audience and emotional triggers to craft language that will resonate with potential customers.
29
30#TAGLINE CRITERIA:
311. Taglines should be short, punchy, and memorable. Aim for no more than 8 words.
322. Focus on highlighting the key USP and emotional trigger for each business.
333. Use language that will resonate with the target audience.
344. Avoid generic or cliched phrases that could apply to any business.
355. Ensure each tagline is distinct and effectively differentiates the business from its competitors.
36
37#INFORMATION ABOUT ME:
38- Businesses to generate taglines for: [LIST BUSINESSES]
39
40#RESPONSE FORMAT:
41| Business Name | Target Audience | Key USP | Emotional Trigger | Proposed Tagline | Impact Score (1-10) | Memorability Score (1-10) |
42|---------------|-----------------|---------|------------------|------------------|---------------------|---------------------------|
43| name | audience | usp | trigger | tagline | impact_score | memorability_score |
44
45✅ tagline_strength
46❌ tagline_weakness
47 `;
48
49 }
50
51 async run(input) {
52 // Extract input parameters
53 const {
54 yourBusiness, // Your business
55 } = input;
56
57 // Generate prompt by replacing placeholders with actual values
58 const prompt = this.promptTemplate
59 .replace('[LIST BUSINESSES]', yourBusiness);
60
61 const url = 'https://openrouter.ai/api/v1/chat/completions';
62 const options = {
63 method: 'POST',
64 headers: { Authorization: 'Bearer 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', 'Content-Type': 'application/json' },
65 body: JSON.stringify({
66 model: "deepseek/deepseek-r1:free",
67 messages: [
68 {
69 role: "user",
70 content: prompt
71 }
72 ]
73 })
74 };
75
76 try {
77 console.log('start processing...');
78 const response = await fetch(url, options);
79 const data = await response.json();
80 const content = data.choices[0].message.content;
81
82 if (!content) {
83 throw new Error('No content returned from the API, Please try again.');
84 }
85
86 // 生成文件名(使用时间戳避免重复)
87 const timestamp = generateTimestamp();
88 const baseFilename = `tagline-${timestamp}`;
89
90 // 创建并保存各种格式的文件
91 const fileUrls = {};
92
93 // 1. 保存 Markdown 文件
94 const markdownBuffer = Buffer.from(content, 'utf-8');
95 const markdownKey = await Actor.setValue(
96 `${baseFilename}.md`,
97 markdownBuffer,
98 { contentType: 'text/markdown' }
99 );
100 fileUrls.markdown = `https://api.apify.com/v2/key-value-stores/${Actor.getEnv().defaultKeyValueStoreId}/records/${baseFilename}.md`;
101
102 // 2. 保存 HTML 文件
103 const marked = await import('marked');
104 const htmlContent = `
105 <!DOCTYPE html>
106 <html>
107 <head>
108 <meta charset="UTF-8">
109 <title>Analysis Report</title>
110 <style>
111 body { font-family: Arial, sans-serif; margin: 40px; }
112 table { border-collapse: collapse; width: 100%; }
113 th, td { border: 1px solid #ddd; padding: 8px; }
114 th { background-color: #f2f2f2; }
115 </style>
116 </head>
117 <body>
118 ${marked.parse(content)}
119 </body>
120 </html>
121 `;
122 const htmlBuffer = Buffer.from(htmlContent, 'utf-8');
123 const htmlKey = await Actor.setValue(
124 `${baseFilename}.html`,
125 htmlBuffer,
126 { contentType: 'text/html' }
127 );
128 fileUrls.html = `https://api.apify.com/v2/key-value-stores/${Actor.getEnv().defaultKeyValueStoreId}/records/${baseFilename}.html`;
129
130 // 3. 生成 PDF 文件
131 const puppeteer = await import('puppeteer');
132 const browser = await puppeteer.launch({
133 args: [
134 '--no-sandbox',
135 '--disable-setuid-sandbox',
136 '--disable-dev-shm-usage',
137 '--disable-gpu'
138 ],
139 headless: true
140 });
141 const page = await browser.newPage();
142 await page.setContent(htmlContent);
143 const pdfBuffer = await page.pdf({
144 format: 'A4',
145 margin: { top: '2cm', right: '2cm', bottom: '2cm', left: '2cm' }
146 });
147 await browser.close();
148
149 const pdfKey = await Actor.setValue(
150 `${baseFilename}.pdf`,
151 pdfBuffer,
152 { contentType: 'application/pdf' }
153 );
154 fileUrls.pdf = `https://api.apify.com/v2/key-value-stores/${Actor.getEnv().defaultKeyValueStoreId}/records/${baseFilename}.pdf`;
155
156
157 let chargeResult = await charge();
158
159 // For Rental
160 // let chargeResult = { success: true };
161
162 if (chargeResult.success) {
163 // 将结果推送到 dataset
164 await Actor.pushData({
165 input: {
166 yourBusiness
167 },
168 htmlFile: fileUrls.html,
169 pdfFile: fileUrls.pdf,
170 markdownFile: fileUrls.markdown
171 });
172 console.log('Process completed successfully.');
173 } else {
174 console.log('Charge failed.');
175 }
176
177 } catch (error) {
178 console.error(error);
179 }
180 }
181
182}
183
184/**
185 * 生成时间戳
186 */
187function generateTimestamp() {
188 const now = new Date();
189 const year = now.getFullYear();
190 const month = String(now.getMonth() + 1).padStart(2, '0');
191 const day = String(now.getDate()).padStart(2, '0');
192 const hours = String(now.getHours()).padStart(2, '0');
193 const minutes = String(now.getMinutes()).padStart(2, '0');
194 const seconds = String(now.getSeconds()).padStart(2, '0');
195 const timestamp = `${year}-${month}-${day}-${hours}-${minutes}-${seconds}`;
196 return timestamp;
197}
198
199
200/**
201 * 扣费
202 */
203async function charge() {
204
205 let runId = Actor.getEnv().actorRunId;
206 let token = Actor.getEnv().token;
207 const myHeaders = new Headers();
208 myHeaders.append("Content-Type", "application/json");
209 myHeaders.append("Authorization", `Bearer ${token}`);
210 myHeaders.append("idempotency-key", uuidv4());
211
212 const raw = JSON.stringify({
213 "eventName": "per-result",
214 "eventCount": 1,
215 "count": 1
216 });
217
218 const requestOptions = {
219 method: "POST",
220 headers: myHeaders,
221 body: raw,
222 redirect: "follow"
223 };
224
225 try {
226 const response = await fetch(`https://api.apify.com/v2/actor-runs/${runId}/charge`, requestOptions);
227 const result = await response.json();
228 if (result?.error?.message) {
229 if (result?.error?.type !== 'cannot-charge-non-pay-per-event-actor' && result?.error?.type !== 'user-or-token-not-found') {
230 console.log(result?.error);
231 return { success: false };
232 } else {
233 return { success: true };
234 }
235 } else {
236 return { success: true };
237 }
238 } catch (error) {
239 console.error(error);
240 return { success: false };
241 }
242}
243
244
245await Actor.init();
246
247Actor.main(async () => {
248 const input = await Actor.getInput();
249 // const input = {
250 // "yourBusiness": "a fitness center"
251 // };
252 const crawler = new AITool();
253 await crawler.run(input);
254});
.dockerignore
1# configurations
2.idea
3
4# crawlee and apify storage folders
5apify_storage
6crawlee_storage
7storage
8
9# installed files
10node_modules
11
12# git folder
13.git
.editorconfig
1root = true
2
3[*]
4indent_style = space
5indent_size = 4
6charset = utf-8
7trim_trailing_whitespace = true
8insert_final_newline = true
9end_of_line = lf
.eslintrc
1{
2 "extends": "@apify",
3 "root": true
4}
.gitignore
1# This file tells Git which files shouldn't be added to source control
2
3.DS_Store
4.idea
5.zed
6node_modules
7storage
package.json
1{
2 "name": "js-scrape-single-page",
3 "version": "0.0.1",
4 "type": "module",
5 "description": "This is an example of an Apify actor.",
6 "engines": {
7 "node": ">=18.0.0"
8 },
9 "dependencies": {
10 "apify": "^3.2.5",
11 "puppeteer": "^23.5.0",
12 "puppeteer-core": "^23.5.0",
13 "marked": "^15.0.7",
14 "uuid": "^11.1.0"
15 },
16 "scripts": {
17 "start": "node ./src/main.js",
18 "test": "echo \"Error: oops, the actor has no tests yet, sad!\" && exit 1"
19 },
20 "author": "It's not you it's me",
21 "license": "ISC"
22}
Pricing
Pricing model
Pay per eventThis Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Per success result
$3.99
Per success result