Macro Guide

In the program you can use various macros to generate content automatically or modify things. Please note that you can use the variable itself from the project used anywhere. E.g. if you defined “Your E-Mail” you can use it in the project like %your e-mail%. The usage is recursive and allows you to use macros in the content that a macro creates.

Some macros allow you to define how they are used according to the case of the result.

  • If you use %Random_Anchor_Text% it means to capitalize each word.
  • If you use %RANDOM_ANCHOR_TEXT% it means to write all upper case.
  • If you use %rANdOm_AnChoR_TeXT% it means to mix up and lower case.

Just all lowercase will not touch the macro content.

A spin syntax always begins with a { and ends with a }. Multiple items are separated with a |. A random item is used when creating the content.

Example: This {is|can be} a test.
Output 1: This is a test.
Output 2: This can be a test.

As you see above the resulting content can have two variations and a random one is used here. However, you can also use fixed data when using so called spintags as in the example below.

Example: {#TAG1 I love {the|your} site|#TAG2 Hello there}. {#TAG1 Best forum ever.|#TAG2 How are you?}
Output 1: I love the site. Best forum ever.
Output 2: Hello there. How are you?

In no way would it ever create content with “I love this forum. How are you?” or “Hello there. Best forum ever.”. And as you see in the example above you can also use nested spin syntax.

Another example is the use of URL domain binding like the following…

Example: {#.de Hallo Fremder!|#.com Hello Stranger!}
Output 1: For a German Site it will write: Hallo Fremder!
Output 2: For a Site ending with .com it will write: Hello Stranger!

Another syntax is the following where all variations are used but in a random order.

Example: ~{Sentence 1.|Sentence 2.|Sentence 3.}
Output 1: Sentence 1. Sentence 3. Sentence 2.
Output 2: Sentence 3. Sentence 1. Sentence 2.
Output 3: Sentence 2. Sentence 2. Sentence 1.

You can also use nested spin syntax where you put one spin syntax in another like: {This {was|is} wonderful.|Thank{ you| you all|s}}

This macro will read a random line from a file or URL and put them together according to the <line output> mode. The line output can have the following values:

SJoins the lines with a single space.
LJoins the lines with a new link
NJoins the lines with nothing inbetween.
SPSame as “S” but reads the number of lines not randomly but one after the other.
LPSame as “L” but reads the number of lines not randomly but one after the other.
NPSame as “N” but reads the number of lines not randomly but one after the other.

You can also use a syntax like (<min lines>,<max lines>) or [<min lines>..<max lines>] for the parameter <number of lines>. This would not always use the same number of lines but choose a random one between the given range (e.g. #file_links[names.dat,(2,10),S]). Another alternative is to use a directory instead of a a file. Than a random file from that directory is used.
Example: I like: #file_links[names.dat,2,S] and all on this forum who contribute to it.
Output: I like: Devin Ozz and all on this forum who contribute to it.

The macro reads two random names from the file “names.dat” and put a space between them.

This macro reads the content of a file or URL.

Example: Something about myself: #file[about_yourself.dat]
Output: Something about myself: I am a poor coder and need your money ;)

The macro reads the whole content of the file “about_yourself.dat” and inserts it into the text.

This will try to insert content of grabbed content from the present website. The file xgrab.txt can hold the definitions on how to get the content in the following way…

<h1>[...]</h1>
<title>[...]</title>

The content is collected (first match on the page only unless you use #grabbedall) and joined together the way that line output is defined.

SJoins the lines with a single space (default).
LJoins the lines with a new link
NJoins the lines with nothing in between.

Example: I read “#grabbed[N]” and had to smile :)
Output: I read “Welcome to my Forum” and had to smile :)

Assuming the webpage has a title like “Welcome to my Forum” and your xgrab.txt file has something defined like “<title>[…]</title>” you get that output. Unfortunately I couldn't find any decent xgrab.txt file to play with so you have to create your own or copy it from an other program that also uses this.

Extended syntax could hold more variables like #grabbed[S,4] which will take 4 matches and merg them with a space.

This macro generates a random nick name with a character length between min length and max length. The first parameter is ignored for now. Just put anything you want for it.

Example: Hello #gennick[XYZ,5,10]
Output: Hello DevinSan

In the example above the macro created a nickname with a length of 8 characters and inserted it in the text.

This inserts a range of characters in the text. A range can have the following syntax:

#random[a,b,c] → This will either insert a, b or c into the text. #random[0..9,A..Z] → This will insert a number or an upper case character into the text.

Example: My password is: test#random[0..9]#random[-,_]#random[a..z,A..Z]
Output: My password is: test3-H

The example above inserted 3 characters according to the used ranges in the macro.

This macro is not inserting anything but indicates that the whole text for this content should be modified with spell/type errors. The number can go from 1 to 10000 and indicates how often spell/type errors should be created for a word. If you use 10000 you will have almost every word in the text spelled wrong. But why you might ask yourself now is this of any use? Normally you want to create perfectly written content and not have your text with spell errors. Some people prefer this to not create duplicate content and have it look more natural as spell errors happen to everyone of us.

Used spelling errors are:

TypeDescription / Example
skip characterexample becomes exaple (missing the m)
double characterexample becomes exxample (x repeated)
reverse two charactersexample becomes exmaple (a and p swapped)
use next character on keyboardexample becomes exsmple (s is next on keyboard to a)
additional character on keyboardexample becomes exsample (s is next on keyboard to a)

This macro tries to translate the text between #trans and #notrans to the language used on the site where it is submitting to. Please note that the language detection on the site might not always work and that this translation is done online. If the translation fails, it will use the original text. The original text can be in any language as the translation tries to auto detect the language, but I would suggest you to use English here.

Example: #trans The minute that we are born we begin to die. #notrans
Output: Die Minute, die wir geboren werden, beginnen wir zu sterben.

The example above is translating the sentence “The minute that we are born we begin to die.” into “Die Minute, die wir geboren werden, beginnen wir zu sterben.” while we submit to a German site like http://www.rostock-schwarz.de/

Another format could be used where you specify the langauge to translate in the macro itself using:

#trans_de Some text here #notrans
#trans_en_de Some text here #notrans

The first macro will always translate the content to German no matter where it submits to.
The second macro will always translate it to German but will not auto detect the input language but assume it is English. Please use some of the language codes from below:

CodeLanguage
afAfrikaans
arArabic
azAzerbaijani
beBelarusian
bgBulgarian
bnBengali
bsBosnian
caCatalan
cebCebuano
csCzech
cyWelsh
daDanish
deGerman
elGreek
enEnglish
eoEsperanto
esSpanish
etEstonian
euBasque
faPersian
fiFinnish
frFrench
gaIrish
glGalician
guGujarati
haHausa
hiHindi
hmnHmong
hrCroatian
htHaitian Creole
huHungarian
hyArmenian
idIndonesian
igIgbo
isIcelandic
itItalian
iwHebrew
jaJapanese
jwJavanese
kaGeorgian
kmKhmer
knKannada
koKorean
laLatin
loLao
ltLithuanian
lvLatvian
miMaori
mkMacedonian
mnMongolian
mrMarathi
msMalay
mtMaltese
neNepali
nlDutch
noNorwegian
paPunjabi
plPolish
ptPortuguese
roRomanian
ruRussian
skSlovak
slSlovenian
soSomali
sqAlbanian
srSerbian
svSwedish
swSwahili
taTamil
teTelugu
thThai
tlFilipino
trTurkish
ukUkrainian
urUrdu
viVietnamese
yiYiddish
yoYoruba
zh-CNChinese (Simplified)
zh-TWChinese (Traditional)
zuZulu

This macro takes the content between #spin and #nospin and uses the configured spinners on it to rewrite the content.

Example: #spin The minute that we are born we begin to die. #nospin
Output: The min. that they are born we all start to disappear.

This is just a sample of what spin rewriters might make out of it.

GPT stands for Generative Pre-trained Transformer and will generate text using AI. Read more about GPT3 on Wikipedia

Optional parameters are: #gpt<length>-<custom_generator_id> Where <length> is the length in words of the generated. Between #gpt and #nogpt you have to supply some keywords that the generated text is about.

Example: #gpt10 seo software #nogpt
Output: This is a randomly generated text with content about SEO software.

Make sure you sign up at https://inferkit.com/ for an API-KEY. The API Key must have been entered once while in the Article Manager and add a GPT3 generated article.

This will create a text based on the prompt using the AI model “model”, the temperature “temperature” (optional) and language (optional). You can also use a custom template defined in openai.dat file (Science Article,Case Study,…). If you use just the template, you also need to define the <amount of words> and <keyword>. Make sure you have defined your OpenAI API Key before when e.g. adding an article in article manager ones.

Example: #openai[gpt-3.5-turbo,write a positive sentence about humans.]
Output: Humans have managed not to kill themselves as a species (yet).

Example: #openai[gpt-4,Case Study,10,SEO Software,0.7]
Output: A case study about SEO Software would be very nice.

This is generating a random number between min and max.

Example: I was born on %random-1960-1980%.
Output: I was born on 1968.

The example above generated a random number between 1960 and 1980 and finally inserted 1968.

This macro is reading a random line from the file and taking the set column (seperated by a , from it. If you use the macro with the same file name but a different column, than that exact line is used and not again a new random line. This makes it possible to e.g. have a file with address data and use the same content that belongs to one address instead of unrelated data.

Example: I life in %columnspinfile-address_data.dat-1% - %columnspinfile-address_data.dat-3%.
Output: I life in Australia – Amaroo.

Lets have a quick look at the file “address_data.dat”:

...
Australia,ACT,Amaroo,2914,37 Parkes Road,(02) 6114 7945,
United States,OK,Oklahoma City,73109,4310 Meadow Drive,405-990-7523,
...

As you see it has one address each line and seperated by a “,”. The content is: Country,State,City,ZIP,Street,Phone. Now the program takes a random line out of that file and uses that content to insert the different columns into the text where %columnspinfile-address_data.dat-1% is the country and %columnspinfile-address_data.dat-3% is the city.

This macro is using a random file from the folder and using that as content. Also note that the program is trying to match the same file name or file number when locating a file in a different folder. E.g. if %spinfolder-c:\my_articles\% is using file “article6.txt” than it tries to use “summary6.txt” (or anything with the number 6 in file name) from the macro %spinfolder-c:\my_article_summaries\%.

%spinfolder2% is not keeping the previously used content in mind and %spinfolderdelete% is deleting the file after using it to not use it again.

Example: %spinfolder-c:\my_articles\%
Output: This is the content of article 6 which I have put in a folder….

This macro is taking the filename from a random file in the given folder as content. It is not reading the file but just using the filename itself. It is removing the extension and transforming “_” to spaces like:

“c:\articles\How_SEO_Works.txt” → “How SEO Works”

This is reading a random line from the file. Though the same line is used if this macro is used more than once on a submission with the same file. As alternative you can also use a directory instead of a a file. Than a random file from that directory is used.

Example: My name is %spinfile-names.dat% %spinfile-lnames.dat%.
Output: My name is Earl Grey.

The example above is using the macro two times but on different files (so it is always using a random line, just when you later use the %spinfile-names.dat or %spinfile-lnames.dat% on the same site it is using the same content).

This macro is having the same behavior as the %spinfile% one, except that the contents is never kept in mind and a new random content is used each time you use it, even with the same file.

This is the same as using the #file[<filename or url>] macro but it is not accepting an URL.

Example: %file-c:\my_articles\article6.txt%
Output: This is the content of article 6 which I have put in a folder….

This will insert a random keyword that you have defined in your project into the text. Please don't use %keywords% (note the s) as that would insert all keywords into the text and not just one.

Example: My site is all about %keyword% and %keyword%
Output: My site is all about division and joy .

The example above is taking two times a random keyword (in this case joy and division) from your project and inserts it.

If you use %KeyWord% it will capitalize each word in case it has more than one.

This macro would insert not a random keyword but take the exact order from the project setting. %keyword1% is taking the first defined keyword, %keyword2% the second and so on.

Example: My site is all about %keyword1% and %keyword2%
Output: My site is all about joy and divistion.

Assuming you have “joy, division, music, …“ defined in your project as keywords you would get the above output as it takes %keyword1% which is joy and %keyword2% which is division.

This is replaced with the URL that the program “clicked” to get to the current page. It can be seen as a referrer page used in HTML headers e.g. to indicate where the User came from.

Example: I clicked on a link from %source_url% and came here.
Output: I clicked on http://www.gsa-onlione.de and came here.

If the current URL is now https://www.gsa-online.de/contact.php but was previously on https://www.gsa-onlione.de you would get the output from above.

This is replaced with the current URL the program is on.

Example: I clicked on a link from %source_url% and now I am on %targeturl%.
Output: I clicked on https://www.gsa-onlione.de and now I am on https://www.gsa-online.de/contact.php.

This example uses the previous %source_url% macro as well to demonstrate what the content of the macros might be.

This macro inserts the full domain of the site we submit to.

Example: Nice to be on % targetsubdomain%.
Output: Nice to be on forum.gsa-online.de.

This macro will insert the main domain without the suddomain as in the macro above.

Example: Nice to be on % targetdomain%
Output: Nice to be on gsa-online.de.

This macro will insert the host together with http: or https: into the text.

Example: Now the whole site %targethost% is great.
Output: Now the whole site https://www.gsa-online.de is great.

This macro is just taking the path from the URL the program is on.

Example: I am surfing on %targethost%targetpath%.
Output: I am surfing on https://www.gsa-online.de/contact.php
In this sample we used two macros as this macro alone is not making much sense in most cases.

This macro is just taking the parameters of an URL (including the ?-Sign). Also note that if there is no parameter used for the URL it is left empty.

Example: I am surfing on %targethost%targetpath%targetparameters%.
Output: I am surfing on https://www.gsa-online.de/contact.php?lang=de

In this case we used all tree macros from above.

These macros are referring to the very first URL used when the submission started. The output is the same as the one without the original_ prefix.

This is replaced with the domain of your URL that you want to submit.

Example: I am working a lot on my site at %url_domain% lately.
Output: I am working a lot on my site at gsa-online.de lately.

This is replaced with the path of the URL that you want to submit.

This is replaced with the parameter of the URL that you want to submit.

This gets internally handled as <a href=“%url%”>%anchor_text%</a>

This is generating a random email address with a correct syntax and an existing domain. The program tries to reuse the value used from “names.dat” (random names) to generate an email that looks related to your name.

Example: My email is %random_email%.
Output: My email is blah@hotmail.com.

This macro will insert the content of an email that you see before the @ sign.

Example: My email is %random_email% so the thing before the @ is %emailuser%.
Output: My email is blah@hotmail.com so the thing before the @ is blah.

The example above might not make a lot sense when using in your project content but it might be required for scripting things together.

This macro will insert the content of an email that you see after the @ sign.

Example: My email is %random_email% so the thing after the @ is %emailhost%.
Output: My email is blah@hotmail.com so the thing before the @ is hotmail.com.

Again this example might not make much sense when using in your project content but it might be required for scripting things together.

This generates a random name (first name only) and would be the same as when using the macro %spinfile-names.dat%.

Example: My name is %name%.
Output: My name is Earl.

This will insert the URL you are trying to submit.

Example: <a href=“%url%”>%anchor_text%</a>
Output: <a href=“https://www.gsa-onlione.de/”>GSA</a>

Assuming that the URL is defined as http://www.gsa-online.de/ and the anchor text as GSA you would get the above content.

The title of the current URL you are about to submit to (everything between html tag <title></title>) is used here.

Example: Wow “%blogtitle%” is indeed an interesting topic.
Output: Wow “How to do things.” is indeed an interesting topic.

Assuming the website you submit to has <title>How to do things.</title> in there html (the one you see in top of your browser) you would get the above content.

A random meta keyword from the site you are submitting to.

Example: Nice to see someone writing about %meta_keyword%.
Output: Nice to see someone writing about SEO.

Assuming that the website you submit to has:

<meta name="Keywords" content="Google Ranking, SEO, Website Submission” />

…you would get the above content.

This is used for image comment engines only and will have the image title in it (or “this image” if not found).

Example: Very nice image. I think “%image_title%” is the best of all.
Output: Very nice image. I think “Sunset in Rostock” is the best of all.

Assuming that the image you want to place a comment on is called “Sunset in Rostock” you would get the above content.

This will insert a random URL from your project setting. The difference between %url% is that it is purely random and not saved during submission. This makes it possible to insert not only one URL in an article, but also another one from your project.

Example: My Website is %url% and %random_url% as well as %random_url%
Output: My Website is https://www.gsa-online.de/ and https://www.google.de/ as well as https://www.proxy-scraper.com

If you would have used %url% only, you would have three of the same URLs in the output.

This will work the same way as %random_url%. However it tries to stay connected tot he last %random_url% used. This might not always work so handle with care. %random_video% %random_image%

This will insert a random image or video to your content (e.g. in article) to make it look more natural. It uses the sites defined in content_search.dat to search for content related to your article (using your keywords/anchor text). Please note that even though a proper author and source is added to the image/video it might still not be enough in terms of copyright notes.

There are other variations like…

%random_banchor_text%Random Branding anchor text
%random_lanchor_text%Random LSI anchor text
%random_panchor_text%Random Partial anchor text
%random_sanchor_text%Random secondary anchor text

Uses the exact URL from your project (first is %url1%). If you have defined less URLs in the project, it will use a random one.

Uses the exact anchor text from the URL in your project. If no anchor_text was defined with that URL it is handled the same as %anchor_text%.

Uses a random URL from your verified URLs. The special macro %verified_dofollow_url% will use a random dofollow URL. The rest of the related macros /e.g. %verified_anchor_text%) are the same and belong to the content of this macro as well.

Uses the anchor text of the last used verified URL that was used from %verified_url%

Uses a random domain from your verified URLs.

Uses a random host from your verified URLs.

Uses a the path of the previously chosen verified URLs.

Uses a the parameters of the previously chosen verified URLs.

This will take the content of the the variable and only insert the first or random paragraph. You can also use a file, folder or URL as variable to take content from there.

Sample: %random_paragraph-article%

This will take the content of the the variable and only insert the first or random sentence. You can also use a file, folder or URL as variable to take content from there.

Sample: %random_sentence-article%

This will get you the cookie value of the cookie_name. If you leave that URL out, you get the data from the current URL. The path is ignored from the URL.

This will get return the full http header (including GET/Post reply code) or just a specific one if defined along with the macro.

[last_used_user_agent]
type=extract
input=%http-header-user-agent%
[last_reply_code]
type=extract
input=%http-header%
front1=HTTP/1.1|HTTP/1.0
back=" "

This will get you the current date time according to the format string. Below are some exambles:

y Year last 2 digits
yy Year last 2 digits
yyyy Year as 4 digits
m Month number no-leading 0
mm Month number as 2 digits
mmm Month using ShortDayNames (Jan)
mmmm Month using LongDayNames (January)
d Day number no-leading 0
dd Day number as 2 digits
ddd Day using ShortDayNames (Sun)
dddd Day using LongDayNames (Sunday)
ddddd Day in ShortDateFormat
dddddd Day in LongDateFormat
c Use ShortDateFormat + LongTimeFormat
h Hour number no-leading 0
hh Hour number as 2 digits
n Minute number no-leading 0
nn Minute number as 2 digits
s Second number no-leading 0
ss Second number as 2 digits
z Milli-sec number no-leading 0s
zzz Milli-sec number as 3 digits
t Use ShortTimeFormat
tt Use LongTimeFormat
u Unix time stamp
am/pm Use after h : gives 12 hours + am/pm
a/p Use after h : gives 12 hours + a/p
ampm As a/p but TimeAMString,TimePMString
/ Substituted by DateSeparator value
: Substituted by TimeSeparator value

Important : if you want to see characters such as dd in the formatted output, placing them in “ marks will stop them being interpreted as date or time elements.

In addition to this formatting, various of the above options are affected by the following variables, with their default values :

DateSeparator /
TimeSeparator :
ShortDateFormat dd/mm/yyyy
LongDateFormat dd mmm yyyy
TimeAMString AM
TimePMString PM
ShortTimeFormat hh:mm
LongTimeFormat hh:mm:ss
ShortMonthNames Jan Feb …
LongMonthNames January, February …
ShortDayNames Sun, Mon …
LongDayNames Sunday, Monday …
TwoDigitYearCenturyWindow 50

This will insert the content of a file encoded in base64 and also adds the rest required to use this for DATA URI SCHEME.

Example: <img src=”%data_url-c:\images\profile.jpg%” />
Output: <img src=”data:image/png;base64,iVBORw0KGgoAA==” />

Same as %data_url% macro but using a random file from that folder.

This is a special macro that is taking the content from many results of a %random_article% macro and creates a new unique article from them. Though keep in mind that the result might not be too good readable. The higher the <level> parameter is, the more unique but also to more unreadable it becomes. Right now there are just three levels.

%random_articlemix0% Take many articles and mix there paragraphs to one article.
%random_articlemix1% Take many articles and mix there paragraphs + mix sentences in each paragraph.
%random_articlemix2% Take many articles and mix sentences to new paragraphs.

This is a macro that will generate an article title based on the TAG (keyword or anchor text). You can see possible titles when adding an article manually and choosing to generate a title in GUI.

This will search on search engines for a related website to the projects topic and make a link.

e.g. you can use at the end of your article…

Related links:
 - %related_url_link%
 - %related_url_link%

This can e.g. turn into…

Related links:
 - <a href="http://www.gsa-online.de/">http://www.gsa-online.de/</a>
 - <a href="http://captcha-breaker.gsa-online.de/">http://captcha-breaker.gsa-online.de/</a>

…when the project is about SEO ;)

Another possible syntax is %related_url_link[ignore=domain1.com|url2.com|otherpart]%

This uses the Article Builder API to create content while submitting. You can add the macro in Article Title and “Article” field. Please note that you might not see the content in the TEST/Preview when editing the project.

Please note that the last chosen category from GUI is used to pull content.

The name of the project is inserted (not in test/preview).

%article%, %article_title%, %article_summary%

The macros %article%, %article_title% and %article_summary% will all corrolate to one article in project's article manager . Meaning if you use %article_title% somewhere, it will use %article% from that same randomly chosen article as well.

The macro will generate a friendly name from the domain like gsa-online.de becomes Gsa Online