Workflow prompt Wednesday

Got it! You’re aiming to import a text file (likely CSV or tab-delimited) into your iPhone that contains fields like **name, phone number, and email**, and then automate texting those contacts—right?

Here’s a clearer prompt that reflects your goal:

**Prompt**: _“My objective is to import a plain text file into my iPhone that includes contact data—specifically full name, phone number, and email address. Once imported, I want to automate sending an SMS or iMessage to each contact. The workflow should map each row of the file to a new or existing contact, then send a customized message using Shortcuts, Scriptable, or other iOS-compatible tools.”_

This sets the stage for importing structured contact info and scaling personal messages. From here, we can break it down into parts like:

1. **File format** – CSV, tab-delimited, or even .vcf?
2. **Import method** – Files app, iCloud, Shortcuts, or manual?
3. **Contact creation or sync** – Apple Contacts API, Scriptable, or Shortcut-based automation? 4. **Messaging** – Static vs dynamic message body per contact?

Want to roll with a CSV example and explore how to parse and act on it using Shortcuts or Scriptable? Or are you leaning toward a different method of automation? Let’s fine-tune it together. Sent from my iPhone

v2 JSON V2

{
“WFWorkflowClientRelease”: “2.1”,
“WFWorkflowImportQuestions”: [],
“WFWorkflowTypes”: [],
“WFWorkflowActions”: [
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.documentpicker.open”, “WFWorkflowActionParameters”: {
“WFDocumentPickerMode”: “Import”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.file.read” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.split”, “WFWorkflowActionParameters”: {
“WFSeparator”: “,”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.setvariable”, “WFWorkflowActionParameters”: {
“WFVariableName”: “PhoneNumbers”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.remove.duplicates”, “WFWorkflowActionParameters”: {
“WFText”: {
“Type”: “Variable”,
“VariableName”: “PhoneNumbers”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.setvariable”, “WFWorkflowActionParameters”: {
“WFVariableName”: “UniqueNumbers”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.choosefrommenu”, “WFWorkflowActionParameters”: {
“WFMenuItems”: [
{
“WFMenuItemTitle”: “Run Dry Test”,
“WFMenuItemActions”: []
},
{
“WFMenuItemTitle”: “Send Messages”,
“WFMenuItemActions”: []
}
],
“WFMenuPrompt”: “Choose mode:”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.repeat.each”, “WFWorkflowActionParameters”: {
“WFRepeatInput”: {
“Type”: “Variable”,
“VariableName”: “UniqueNumbers”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.getitem”, “WFWorkflowActionParameters”: {
“WFItems”: [
“Hi! This is [Your Name] from [Your Business]. Just reaching out and hope you’re doing well.”,
“Håfa adai! We wanted to touch base and say hello from [Business Name]. Stay safe!”,
“Greetings from [Your Team]—just checking in to share a quick update and warm wishes.”,
“Hello! [Your Business] is reaching out with some exciting news. Let us know how you’ve been!”,
“Hey there! A quick message from [Your Name]—thanks for being part of our journey.” ],
“WFIndex”: {
“Value”: {
“Value”: “Random”,
“Type”: “Magic”
}
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.setvariable”, “WFWorkflowActionParameters”: {
“WFVariableName”: “RandomMessage”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.conditional”, “WFWorkflowActionParameters”: {
“WFCondition”: {
“Value”: {
“Value”: “Provided Input”,
“Type”: “ActionOutput”
},
“Condition”: “is”,
“Value2”: “Run Dry Test”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.comment”, “WFWorkflowActionParameters”: {
“WFCommentActionText”: “Dry run mode: Preview only”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.showresult”, “WFWorkflowActionParameters”: {
“WFInput”: {
“Value”: “Sending ‘{{RandomMessage}}’ to {{Repeat Item}}”, “Type”: “String”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.nothing” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.else” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.sendmessage”, “WFWorkflowActionParameters”: {
“WFSendMessageText”: {
“Type”: “Variable”,
“VariableName”: “RandomMessage”
},
“WFSendMessageRecipient”: {
“Type”: “Variable”,
“VariableName”: “Repeat Item”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.getcurrentdate” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.combine”, “WFWorkflowActionParameters”: {
“WFText”: [
{
“Type”: “Magic”,
“VariableName”: “RandomMessage”
},
” → “,
{
“Type”: “Magic”,
“VariableName”: “Repeat Item”
},
” @ “,
{
“Type”: “Magic”,
“VariableName”: “Current Date”
}
]
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.append”, “WFWorkflowActionParameters”: {
“WFText”: {
“Value”: “Bulk SMS Log”,
“Type”: “String”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.repeat.end” }
]
}

JSON to paste to contact script

{
“WFWorkflowClientRelease”: “2.1”,
“WFWorkflowImportQuestions”: [],
“WFWorkflowTypes”: [],
“WFWorkflowActions”: [
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.documentpicker.open”, “WFWorkflowActionParameters”: {
“WFDocumentPickerMode”: “Import”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.file.read”, “WFWorkflowActionParameters”: {
“WFFile”: {
“Value”: “Provided Input”,
“Type”: “ActionOutput”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.split”, “WFWorkflowActionParameters”: {
“WFInput”: {
“Value”: “Provided Input”,
“Type”: “ActionOutput”
},
“WFSeparator”: “,”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.repeat.each”, “WFWorkflowActionParameters”: {
“WFRepeatInput”: {
“Value”: “Provided Input”,
“Type”: “ActionOutput”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.sendmessage”, “WFWorkflowActionParameters”: {
“WFSendMessageRecipient”: {
“Value”: “Repeat Item”,
“Type”: “Variable”
},
“WFSendMessageText”: “Håfa adai from [Your Business]! Just reaching out with a quick hello. 😊” }
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.repeat.end”, “WFWorkflowActionParameters”: {}
}
]
}

GUAM businesses

16719714283,16719871218,16719879887,16719884549,16719884605,18082321433,16718887599,16718989469,16719296768,16719671695,16719711975,16719714283,16717971157,16717971314,16717971552,16717977235,16717979770,16718589354,16718640880,16717773862,16717775353,16717872818,16717873822,16717879046,16717884441,16717884538,16717274663,16717275305,16717277391,16717278987,16717471934,16717770479,16717773660,16716887212,16716887709,16716889677,16716899877,16717271925,16717271971,16717272277,16716874334,16716875106,16716876274,16716877704,16716878714,16716884318,16716494438,16716820811,16716860050,16716862829,16716864688,16716871951,16714866209,16714882275,16714882985,16714885857,16714886357,16714889098,16714898998,16714834770,16714835113,16714835907,16714837406,16714837518,16714861655,16714864673,16714825809,16714825853,16714826778,16714828268,16714828804,16714829940,16714834438 Sent from my iPhone

Tuesday work phone number script

#!/bin/bash

INPUT=”contacts.csv”
OUTPUT=”results.csv”

echo “Name,Phone,Found Name” > “$OUTPUT”

tail -n +2 “$INPUT” | while IFS=, read -r name phone
do
echo “Checking $phone…”

# Construct the URL
url=”https://www.searchyellowdirectory.com/reverse-phone/1671/$phone

# Fetch page and extract result using grep + sed (basic page title parsing)
found_name=$(curl -s “$url” | grep -o ‘.*’ | sed -E ‘s/<\/?title>//g’ | sed -E ‘s/.*for number [0-9]+ – (.*)/\1/’)

# Fallback if nothing found
if [[ -z “$found_name” || “$found_name” == *”No results found”* ]]; then found_name=”Not Found”
fi

echo “$name,$phone,$found_name” >> “$OUTPUT”
done

echo “✅ Done! See: $OUTPUT”

Script to SMS multiple numbers

#!/bin/bash
MESSAGE=”Hello from my iMac!” # Your message

# List of phone numbers in sequence after yours
PHONE_NUMBERS=(“6717872345” “6717872346” “6717872347” “6717872348” “6717872349” “6717872350” “6717872351” “6717872352” “6717872353” “6717872354”)

# Loop through each number and send the message
for PHONE_NUMBER in “${PHONE_NUMBERS[@]}”; do
osascript <

OCR code

import requests

def ocr_space_file(filename, overlay=False, api_key=’helloworld’, language=’eng’): “”” OCR.space API request with local file.
Python3.5 – not tested on 2.7
:param filename: Your file path & name.
:param overlay: Is OCR.space overlay required in your response. Defaults to False.
:param api_key: OCR.space API key.
Defaults to ‘helloworld’.
:param language: Language code to be used in OCR.
List of available language codes can be found on https://ocr.space/OCRAPI Defaults to ‘en’.
:return: Result in JSON format.
“””

payload = {‘isOverlayRequired’: overlay,
‘apikey’: api_key,
‘language’: language,
}
with open(filename, ‘rb’) as f:
r = requests.post(‘https://api.ocr.space/parse/image‘, files={filename: f},
data=payload,
)
return r.content.decode()

def ocr_space_url(url, overlay=False, api_key=’helloworld’, language=’eng’): “”” OCR.space API request with remote file.
Python3.5 – not tested on 2.7
:param url: Image url.
:param overlay: Is OCR.space overlay required in your response. Defaults to False.
:param api_key: OCR.space API key.
Defaults to ‘helloworld’.
:param language: Language code to be used in OCR.
List of available language codes can be found on https://ocr.space/OCRAPI Defaults to ‘en’.
:return: Result in JSON format.
“””

payload = {‘url’: url,
‘isOverlayRequired’: overlay,
‘apikey’: api_key,
‘language’: language,
}
r = requests.post(‘https://api.ocr.space/parse/image‘,
data=payload,
)
return r.content.decode()

# Use examples:
test_file = ocr_space_file(filename=’example_image.png’, language=’pol’)